![](/img/trans.png)
[英]How to extract System.Reflection.PropertyInfo names of a class object as first row of a csv file
[英]Reflection: How to get the class object via PropertyInfo
我有2節課。 ClassA有一些ClassB 的對象,稱為Field01、Field02、... Class A 也有一個 ClassB 項目的列表。
我知道 ClassB 項目的名稱,並想用列表中的值填充 ClassB 項目。
示例代碼:
public class ClassA
{
public ClassB Field01 {get;set;}
public ClassB Field02 {get;set;}
//...
List<ClassB> myItems;
public void FillItems()
{
foreach(var item in MyItems)
{
// what I want in hardcode:
Field01.ValueA = MyItems[0].ValueA;
Field01.ValueB = MyItems[0].ValueB;
Field02.ValueA = MyItems[1].ValueA;
// ...
}
}
}
public class ClassB
{
public string ValueA {get;set;}
public string ValueB {get;set;}
}
在我的情況下,我將有一個計數變量,它將創建 Field01、Field02、Field03 ……名稱,具體取決於我的 List 中有多少項目(ClassA 中總是有足夠的 ClassB 字段來填充)
我知道我可以通過名稱獲取我的 ClassB 項目的PropertyInfo ,但我不知道我可以訪問 ClassB 屬性 ValueA 和 ValueB
// If ClassB was just a string or object this would work
Type myType = typeof(ClassA);
PropertyInfo myPropInfo = myType.GetProperty("Field01");
myPropInfo.SetValue(this, "Hello", null);
由於您知道屬性的聲明類型是ClassB
,因此您可以獲取ValueA
和ValueB
的PropertyInfo
。 然后,您需要獲取FieldXX
的值(不要設置它!)並設置ValueA
和ValueB
。
我們將要處理多種Type
, PropertyInfo
和object
對象,所以你應該適當命名的變量,而不是僅僅myPropInfo
或myType
。
for (int i = 0 ; i < MyItems.Count ; i++) {
var classAType = typeof(ClassA);
var classBType = typeof(ClassB);
var fieldInfo = classAType.GetProperty("Field" + $"{i}".PadLeft(2, '0'));
var fieldValue = fieldInfo.GetValue(this);
var valueAInfo = classBType.GetProperty(nameof(ClassB.ValueA));
var valueBInfo = classBType.GetProperty(nameof(ClassB.ValueB));
valueAInfo.SetValue(fieldValue, valueAInfo.GetValue(MyItems[i]));
valueBInfo.SetValue(fieldValue, valueBInfo.GetValue(MyItems[i]));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.