[英]How can I reflect over and get the value from this inner class?
用戶向我傳遞了一個帶有類名的字符串,以及另一個帶有該類的字段的字符串,我應該將其用於提取一些信息。 這是幾個示例類; 它們都繼承自相同的基類:
public class PersonRow : Row
{
public static readonly RowFields Fields = new RowFields.Init();
public class RowFields : RowFieldBase
{
public Int32Field Id;
public StringField FirstName;
public StringField LastName;
}
}
public class AutomobileRow : Row
{
public static readonly RowFields Fields = new RowFields.Init();
public class RowFields : RowFieldBase
{
public Int32Field Id;
public StringField PaintColor;
public StringField EngineSize;
}
}
用戶將給我類似“ PersonRow”和“ FirstName”的名稱,我需要從中潛入FirstName
字段並提取其中一個名為Expression
的成員的值。
我將Int32Field
和StringField
在內部執行的操作的詳細信息,但足以說明這兩種類型都有一個Expression
成員,這是我需要使用的字符串。
我正在嘗試使用反射來做到這一點,並且到目前為止:
var myClassType = Type.GetType("PersonRow");
var myFields = myClassType.GetField("Fields", BindingFlags.Public | BindingFlags.Static);
var fieldListing = myFields.GetValue(null);
...此時, fieldListing
是一個對象,該對象在引擎蓋下為PersonRow.RowFields
類型。 但是我有點想超越這一點,因為我不確定如何枚舉該數組並從我感興趣的字段中提取Expression
值?
我稍作修改,然后刪除了看起來像您的模型的東西,最后得到了以下結果:
public class PersonRow
{
public static readonly RowFields Fields = new RowFields();
public class RowFields
{
public StringField FirstName = new StringField();
public StringField LastName = new StringField();
}
}
public class StringField
{
public StringField()
{
expr = Expression.Constant("It worked!");
}
public Expression expr { get; set; }
public string str { get; set; }
}
現在,基本上,我們正在尋找PersonRow.Fields.FirstName.expr
的值,可以通過以下代碼完成:
var personRowType = typeof(PersonRow);
var fieldsField = personRowType.GetField("Fields", BindingFlags.Public | BindingFlags.Static);
var fieldsObj = fieldsField.GetValue(null);
var firstNameField = fieldsField.FieldType.GetField("FirstName");
var firstNameObj = firstNameField.GetValue(fieldsObj);
var exprProp = firstNameField.FieldType.GetProperty("expr");
var exprObj = (ConstantExpression)exprProp.GetValue(firstNameObj);
在這里, exprObj
將正確地是一個ConstantExpression
表達式,其值為"It worked!"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.