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 に答える