Вопрос по c#-4.0, reflection, static, c# – Получить значение свойства по его строчному имени

3

Пожалуйста, рассмотрите этот класс:

public static class Age
{    
    public static readonly string F1 = "18-25";
    public static readonly string F2 = "26-35";
    public static readonly string F3 = "36-45";
    public static readonly string F4 = "46-55";
}

Я хочу написать функцию, которая получит "F1" и вернуть "18-25", например

private string GetValue(string PropertyName)
....

Как мне это сделать?

Ваш Ответ

5   ответов
1

 private string GetValue(string propertyName)
 {
       return typeof(Age).GetFields()
           .Where(field => field.Name.Equals(propertyName))
           .Select(field => field.GetValue(null) as string)
           .SingleOrDefault();
 }
0

public static string GetValueUsingReflection(string propertyName)
    {
        var field = Type.GetType("Agenamespace" + "." + "Age").GetField(propertyName, BindingFlags.Public | BindingFlags.Static);
        var fieldValue = field != null ? (string)field.GetValue(null) : string.Empty;
        return fieldValue;
    }

Agenamespace - это пространство имен, в котором объявлен класс Age.

5

public static string GetValue(string PropertyName)
{
   return typeof(Age).GetField(PropertyName).GetValue(typeof(Age));
}

Кажется, статические константы работают немного по-другому. Но вышесказанное сработало с классом в OQ.

Для более общего случая см.этот вопрос.

Вот как это делается с помощью отражения:

public static string GetValue(string PropertyName)
{
   return Age.GetType().GetProperty(PropertyName).ToString();
}

Обратите внимание, что GetProperty () может возвращать значение null, что приведет к сбою, если вы передадите "F9999"

Я не проверял, вам может понадобиться это:

public static string GetValue(string PropertyName)
{
   return Age.GetType().GetProperty(PropertyName,BindingFlags.Static).ToString();
}

Общий случай как комментарий:

public static string GetValue(object obj, string PropertyName)
{
   return obj.GetType().GetProperty(PropertyName,BindingFlags.Static).ToString();
}
спасибо, но есть проблема. Мой классstatic и это не имеетGetType() метод. Я имею в виду это не правильноAge.GetType()... Arian
PropertyInfo.ToString () не возвращает значение свойства.
спасибо могу пройтиClass Name к этой функции и не использоватьAge? Arian
вместо этого передайте объект в качестве первого параметра.
@Steven - см. Редактирование :)
11

SWITCH Заявление для выполнения вышеуказанной задачи:

public static string GetValue(string PropertyName)
{
    switch (PropertyName)
    {
        case "F1":
            return Age.F1;
        case "F2":
            return Age.F2;
        case "F3":
            return Age.F3;
        case "F4":
            return Age.F4;
        default:
            return string.Empty;
    }
}

Используя Reflection, вы можете сделать так:

public static string GetValueUsingReflection(string propertyName)
{
    var field = typeof(Age).GetField(propertyName, BindingFlags.Public | BindingFlags.Static);
    var fieldValue = field != null ? (string)field.GetValue(null) : string.Empty;
    return fieldValue;
}
0

ты должен использовать классТип. you could get the one for the class you are using withe the getType() функция. после того, как вы используете типGetProperty функция. вы бы получилиPropertyInfo учебный класс. этот класс имеетПолучитьЗначение функция. это значение будет возвращать значение свойства.

Похожие вопросы