0

我有一个类,我想动态地从中检索一个属性

这是课堂上的一个样本

namespace TEST
{
    public class Data
    {
        public string Username { get; set; }
        public string Password { get; set; }
    }
}

我正在尝试使用 GetProperty,但它总是返回 null

static object PropertyGet(object p, string propName)
{
    Type t = p.GetType();
    PropertyInfo info = t.GetProperty(propName);
    if (info == null)
        return null;
    return info.GetValue(propName);
}

像这样

    var data = new Data();

    var x = PropertyGet(data, "Username");
    Console.Write(x?? "NULL");
4

2 回答 2

2

此行是错误的,应该为您抛出异常:

return info.GetValue(propName);

您需要传入从中提取属性的对象,即

return info.GetValue(p);

另请注意,当前data.Username 空。你想要这样的东西:

var data = new Data { Username = "Fred" };

我已经验证了通过这两个更改,它可以工作。

于 2013-03-28T21:07:05.830 回答
1

这有效:

public class Data
{
    public string Username { get; set; }
    public string Password { get; set; }
}

public class Program
{
    static object PropertyGet(object p, string propName)
    {
        Type t = p.GetType();
        PropertyInfo info = t.GetProperty(propName);

        if (info == null)
        {
            return null;
        }
        else
        {
            return info.GetValue(p, null);
        }
    }

    static void Main(string[] args)
    {
        var data = new Data() { Username = "Fred" };

        var x = PropertyGet(data, "Username");
        Console.Write(x ?? "NULL");
    }
}
于 2013-03-28T21:17:09.513 回答