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)
....

我该怎么做?

4

5 回答 5

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

使用反射,您可以这样做:

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;
}
于 2012-08-12T06:04:53.560 回答
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();
}
于 2012-08-12T06:07:20.880 回答
1

在 Linq 中使用反射:

 private string GetValue(string propertyName)
 {
       return typeof(Age).GetFields()
           .Where(field => field.Name.Equals(propertyName))
           .Select(field => field.GetValue(null) as string)
           .SingleOrDefault();
 }
于 2012-08-12T08:10:52.423 回答
0

你应该使用类Type。您可以使用该功能获得您正在使用的课程getType()。拥有类型后使用GetProperty函数。你会得到一个propertyinfo类。这个类有一个getValue函数。此值将返回属性的值。

于 2012-08-12T06:14:23.903 回答
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 类的命名空间。

于 2012-08-12T06:37:03.240 回答