2010-10-21 80 views
2

存在我宣布我的C#应用​​程序常数是这样的:C#校验值在不断

public class Constant 
public struct profession 
{ 
    public const string STUDENT = "Student"; 
    public const string WORKING_PROFESSIONAL = "Working Professional"; 
    public const string OTHERS = "Others"; 
} 

public struct gender 
{ 
    public const string MALE = "M"; 
    public const string FEMALE = "F"; 
} 
} 

我的验证功能:

public static bool isWithinAllowedSelection(string strValueToCheck, object constantClass) 
{ 

    //convert object to struct 

    //loop thru all const in struct 
      //if strValueToCheck matches any of the value in struct, return true 
    //end of loop 

    //return false 
} 

在运行时,我会想在用户输入的值传递和该结构检查结构中是否存在该值。结构可以是职业和性别。我怎样才能实现它?

例子:

if(!isWithinAllowedSelection(strInput,Constant.profession)){ 
    response.write("invalid profession"); 
} 

if(!isWithinAllowedSelection(strInput,Constant.gender)){ 
    response.write("invalid gender"); 
} 
+1

这听起来像一个'enum'比结构更好的情况。 – RPM1984 2010-10-21 10:09:18

回答

4

你可能想使用enums,不是结构与常量。


枚举给你很多的可能性,也不是那么难用的字符串值,将其保存到数据库等

public enum Profession 
{ 
    Student, 
    WorkingProfessional, 
    Others 
} 

现在:

要检查是否存在由值的名字在Profession值:

var result = Enum.IsDefined(typeof(Profession), "Retired")); 
// result == false 

为了得到一个枚举作为作为价值特林:

var result = Enum.GetName(typeof(Profession), Profession.Student)); 
// result == "Student" 

如果实在无法避免使用值名称用空格或其他特殊字符,你可以使用DescriptionAttribute

public enum Profession 
{ 
    Student, 
    [Description("Working Professional")] WorkingProfessional, 
    [Description("All others...")] Others 
} 

而现在,从Profession价值,你可以使用get描述此代码(在此处以扩展方法实现):

public static string Description(this Enum e) 
{ 
    var members = e.GetType().GetMember(e.ToString()); 

    if (members != null && members.Length != 0) 
    { 
     var attrs = members.First() 
      .GetCustomAttributes(typeof(DescriptionAttribute), false); 
     if (attrs != null && attrs.Length != 0) 
      return ((DescriptionAttribute) attrs.First()).Description; 
    } 

    return e.ToString(); 
} 

此方法读取在属性中定义的描述,如果没有,则返回的价值名称。用法:

var e = Profession.WorkingProfessional; 
var result = e.Description(); 
// result == "Working Professional"; 
+0

不,我用这些来解决可读性问题。这些值最终也会保存到数据库中。 – Denny 2010-10-22 15:19:21

+0

我编辑了我的答案并详细阐述了枚举 - 他们可以在这里确定。 – NOtherDev 2010-10-23 17:11:46

+0

非常感谢。这真的很有帮助。谢谢!!! = d – Denny 2010-10-29 09:16:39