簡體   English   中英

反思:如何通過 PropertyInfo 獲取類對象

[英]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 ,因此您可以獲取ValueAValueBPropertyInfo 然后,您需要獲取FieldXX的值(不要設置它!)並設置ValueAValueB

我們將要處理多種TypePropertyInfoobject對象,所以你應該適當命名的變量,而不是僅僅myPropInfomyType

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.

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