簡體   English   中英

沒有使用反射的實例化對象的GetProperties列表中的GetValue

[英]GetValue from list of GetProperties without an instantiated object using reflection

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異常的運行時錯誤。 如何使用反射從屬性列表中獲取值?

gridRow是對Type對象的引用。 GetValue的第一個參數旨在作為目標對象-就像您要嘗試訪問Type對象上的SomeClass屬性一樣。 這顯然是行不通的。

雖然 哈克的方式評估實例屬性,而不必實例的引用的-只要物業不使用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();
    ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM