-1

入力文字列に基づいてオブジェクトの属性を表示したい。入力が「x」でオブジェクトが「obj」の場合、ifやswitchなどの条件演算子を使わずに「obj.x」のようなものを表示したい。誰かが私を助けることができますか?

public void My_Method(String input)
{
MyClass  tempVariable=getMyClass();

display something like ---->  tempVariable.input
}

public getMyClass()
{
MyClass value = MyClass();
value.x=10;
value.y=20;
.........
return value;

}


public class MyClass
{
public int x {get;set;}
public int y {get ;set;}
......
}

これの目的は次のとおりです。API から動的な ExpanObject 型を受け取ります。多くの名前と値のペアがあり、1 つの名前と値のペアには、いくつかの変数名のカンマ区切りのリストとして値が含まれます。これらの変数の値を取得する必要があります

4

3 に答える 3

4

反射を使用できます

var fVal = obj.GetType().GetField("x").GetValue(obj);

また

var pVal = obj.GetType().GetProperty("x").GetValue(obj,null);
于 2012-09-17T09:49:56.130 に答える
0

私は表現ツリーを好む:

 public static class PropertyHelper
    {
        public static string GetName<T>(Expression<Func<T>> e)
        {
            var member = (MemberExpression)e.Body;
            return member.Member.Name;
        }

        public static Type GetPropertyType<T>(Expression<Func<T>> e)
        {
            var member = (MemberExpression)e.Body;
            return member.Type;
        }
    }

そして、名前を取得するのは簡単です:

MyClass tempVariable = getMyClass();
  string varName = PropertyHelper.GetName(() => tempVariable);
 string propName = PropertyHelper.GetName(() => tempVariable.x);
于 2012-09-17T10:02:52.783 に答える
0

リフレクション (低パフォーマンス) または式ツリー (リンク)を使用してみてください

于 2012-09-17T09:51:12.980 に答える