C # проверка значения существует в константе - PullRequest
2 голосов
/ 21 октября 2010

Я объявил константу своего приложения на 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 Ответ

4 голосов
/ 21 октября 2010

Возможно, вы захотите использовать перечисления , а не структуры с константами.


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, вы можете использовать этот код (реализованный здесь как метод расширения):

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