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 また、現在はnullであることに注意してください。次のようなものが必要です。

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

これら 2 つの変更により、動作することを確認しました。

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