1

次のコード (StackOverflow にあります) が機能します。

object ob = new { Name = "Erwin Okken", Age = 23, Position = new Point(2, 5) };
Type type = ob.GetType();
PropertyInfo pr = type.GetProperty("Name");
string value = pr.GetValue(ob, null).ToString(); // Erwin Okken

ただし、独自のクラスを使用すると機能しません。

public class Subject
{
    public string Name;
    public int Age;
    public Point Position;

    public string Stringtest;
    public int IntTest;

    public Subject()
    {

    }
}

Type type = ob.GetType();
PropertyInfo pr = type.GetProperty("Name"); // null
string value = pr.GetValue(ob, null).ToString();

すべての Bindingflags を試しましたが、変数 "pr" は null のままです。誰にもアイデアがありますか?

4

1 に答える 1

2

あなたはこれを持っています:

public class Subject
{
    public string Name;
    ...
}

タイプ定義Nameでは、プロパティではなくフィールドです。タイプを次のように変更する必要があります。

public class Subject
{
    public string Name { get; set; }
    ...
}

または、フィールドとして維持したい場合Name(悪い考え)、次を使用できます。

FieldInfo pr = type.GetField("Name");
于 2013-10-16T10:11:41.637 に答える