开发者

C# check value exist in constant

开发者 https://www.devze.com 2023-01-20 23:17 出处:网络
I have declared my c# application constant this way: public class Constant public struct profession { public const string STUDENT = \"Student\";

I have declared my c# application constant this way:

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";  
 }
}

My validation function:

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
}

During runtime, I will like pass in the user inputted value and the struct to check if the value exist in the struct. The struct can be profession and gender. How can I achieve it?

Example:

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

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


You probably want to use enums, not structs with constants.


Enums gives you a lot of possibilities, it is not so hard to use its string values to save it to the database etc.

public enum Profession
{
  Student,
  WorkingProfessional,
  Others
}

And now:

To check existence of value in Profession by value's name:

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

To get value of an enum as a string:

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

If you really can't avoid using value names with whitespaces or other special characters, you can use DescriptionAttribute:

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

And now, to get description from Profession value you can use this code (implemented here as an extension method):

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();
}

This method fetches description defined in attribute and if there's none, returns value name. Usage:

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

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号