如何获取类成员(字段和属性)及其值的列表?

时间:2015-07-16 08:33:02

标签: c# reflection

我找到了一个解决方案,但似乎对我不起作用( (CrazyCasta答案):

how to get both fields and properties in single call via reflection?

正如我之前所说的,我使用过CrazyCasta的代码:

interface IGetSettable
{
    public void SetValue(
        Object obj,
        Object value,
        Object[] index);

    public Object GetValue(
        Object obj,
        Object[] index);
}

public class ParameterInfoGS : IGetSettable
{
    protected ParameterInfo pi;

    public ParameterInfoExtra(ParameterInfo _pi)
    {
        pi = _pi;
    }

    public void SetValue(
        Object obj,
        Object value,
        Object[] index) { pi.SetValue(obj, value, index); }

    public Object GetValue(
        Object obj,
        Object[] index) { return pi.GetValue(obj, index); }
}

public class FieldInfoGS : IGetSettable
{
    protected FieldInfo pi;

    public FieldInfoExtra(FieldInfo _pi)
    {
        pi = _pi;
    }

    public void SetValue(
        Object obj,
        Object value,
        Object[] index) {pi.SetValue(obj, value, index);}
    public Object GetValue(
        Object obj,
        Object[] index) {return pi.GetValue(obj, index);}
}

public static class AssemblyExtension
{
    public static IGetSettable[] GetParametersAndFields(this Type t)
    {
        List<IGetSettable> retList = new List<IGetSettable>();

        foreach(ParameterInfo pi in t.GetParameters())
            retList.Add(new ParameterInfoExtra(pi));

        foreach(FieldInfo fi in t.GetFields())
            retList.Add(new FieldInfoExtra(fi));

        return retList.ToArray();
    }
}

我得到一些错误,比如ParameterInfo不包含任何GetValue SetValue方法

1 个答案:

答案 0 :(得分:0)

我在之前的一个项目中做了类似的事情。看那个:

context

但最终我摆脱了那段代码,因为这是一个糟糕的方法;)