-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 类型。会有很多名称值对,一个名称值对包含一些变量名称的逗号分隔列表。我必须得到这些变量的值

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

尝试使用反射(较少性能)或表达式树(链接

于 2012-09-17T09:51:12.980 回答
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 回答