簡體   English   中英

使用反射在任意對象上找到數組屬性?

[英]Find an array property on an arbitrary object using reflection?

我有一些生成的類,它們的形式相似但沒有繼承關系,例如:

class horse {}
class horses { public horse[] horse {get;}}
class dog {}
class dogs { public dog[] dog {get;}}
class cat {}
class cats { public cat[] cat {get;}}

我想寫一個像這樣的方法:

ProcessAnimals<T>(Object o)
{
 find an array property of type T[]
 iterate the array
}

因此,我可能會這樣做:

horses horses = ...;
ProcessAnimals<horse>(horses);

似乎可以使用反射功能,但是會是什么樣呢?

您可以遍歷檢查數組類型的屬性:

void ProcessAnimals<T>(object o)
{
    var type = o.GetType();

    var props = type.GetProperties(BindingFlags.Public | BindingFlags.Instance)
                    .Where(pi => pi.PropertyType.IsArray && pi.PropertyType.GetElementType().Equals(typeof(T)));

    foreach (var prop in props)
    {
        var array = (T[])prop.GetValue(o);

        foreach (var item in array)
        {
            //Do something
        }
    }
}

我可以建議采取其他方式,而無需進行反思,因為所有這些類基本上都是相同的:

enum AnimalType
{
Horse,
Dog,
Cat
}
class Animal
{
public AnimalType Type;
}
class Animals
{
public Animal[] Animals { get; }
}
ProcessAnimals(Animals animals)
{
// do something with animals.Animals array
}

暫無
暫無

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

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