[英]Reflection: Property-GetValue by Class-Type (so without an instantiated Object)
[英]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.