views:

43

answers:

1

Hi there,

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");
}
+2  A: 

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";
A.
Nope I using these for readability issue. These values eventually will get saved to database as well.
Denny
I've edited my answer and elaborated more on enums - they can do here for sure.
A.
Wow thanks so much. This is really helpful. THank you!!! =D
Denny

related questions