0
public class SomeClass
{
    public IBy Some1{ get { return By.CssSelector("span[id$=spanEarth]"); } }

    public IBy Some2 { get { return By.CssSelector("span[id$=spanWorm]"); } }

    public IBy Some3 { get { return By.CssSelector("span[id$=spanJim]"); } }
}

はクラスであり、私はこの方法でリフレクションを使用しています:

var gridRow = Type.GetType(typeof(SomeOtherClassInSameNamespace).AssemblyQualifiedName.Replace("SomeOtherClassInSameNamespace", "SomeClass"), true, true);

var rowList = gridRow.GetProperties().Where(p => p.PropertyType.Name.Contains("IBy")).ToList();

int i = 0;
foreach (var property in rowList)
{
    string test = property.GetValue(gridRow, null).ToString();
}

これにより、objectType 例外の実行時エラーが発生します。Reflection を使用してプロパティのリストから値を取得するにはどうすればよいですか?

4

1 に答える 1

0

gridRowTypeオブジェクトへの参照です。の最初のパラメーターは、ターゲット オブジェクトであることを意図しているため、オブジェクトのプロパティにGetValueアクセスしようとしているようなものです。それは明らかにうまくいきません。SomeClassType

インスタンスへの参照を持たずにインスタンス プロパティを評価するハックな方法 ありますが (プロパティが使用しない限り)、それらは実際にはかなり厄介です。this

プロパティがオブジェクト内で状態を必要としない場合は、代わりに静的プロパティにします。その時点でnull、ターゲットとして使用できます。問題ありません。

public class SomeClass
{
    public static IBy Some1 { get { return By.CssSelector("span[id$=spanEarth]"); } }

    public static IBy Some2 { get { return By.CssSelector("span[id$=spanWorm]"); } }

    public static IBy Some3 { get { return By.CssSelector("span[id$=spanJim]"); } }
}
...

var gridRow = Type.GetType(typeof(SomeOtherClassInSameNamespace)
                              .AssemblyQualifiedName
                              .Replace("SomeOtherClassInSameNamespace", "SomeClass"),
                           true, true);
var rowList = gridRow.GetProperties(BindingFlags.Public | BindingFlags.Static)
                     .Where(p => p.PropertyType.Name.Contains("IBy"));

int i = 0;
foreach (var property in rowList)
{
    string test = property.GetValue(null, null).ToString();
    ...
}
于 2012-07-31T21:18:17.333 に答える