[英]Using reflection to cast unknown object to generic class
我有一個將對象作為參數的方法。 在該方法中,我將通過反射遍歷對象的屬性。 一些屬性屬於通用類類型。 我喜歡讀取該泛型類屬性的屬性,但是無法將其強制轉換為泛型類。
public abstract class BaseClass
{
public int Id { get; set; }
}
public abstract class GenericClass<T>: BaseClass
{
public string Description { get; set; }
}
public class DerivedClassA: GenericClass<DerivedClassA>
{
public string A { get; set; }
}
public class DerivedClassB: GenericClass<DerivedClassB>
{
public string B { get; set; }
}
public class ReflectingClass: BaseClass
{
public string Code { get; set; }
public DerivedClassA DerA { get; set; }
public DerivedClassB DerB { get; set; }
}
public static void Reflecting(object obj)
{
var t = GetType(obj)
foreach (var pi in t.GetProperties())
{
if (obj.GetType().BaseType.GetGenericTypeDefinition() == typeof(GenericClass<>)
{
var genClassObjProperty = ((GenericClass<T>)obj).Description; // Error, cannot do this at all !!!
}
}
}
我想要的是使代碼轉到屬性,無論派生類實際上是什么,都將從其派生的GenericClass獲得Description屬性。
我使用的是泛型類,因為在代碼的其他地方,我通過其派生類調用方法並獲得適當的類類型,而無需訴諸各種類型的轉換和傳遞類型。 即:
DerivedClassA.DoSomething()
代替
BaseClass.DoSomething<DerivedClassA>()
要么
BaseClass.DoSomething(type derivedClassType)
看看這個:
public static void Reflecting(object obj)
{
foreach (var pi in obj.GetType().GetProperties())
{
if (pi.PropertyType.BaseType.IsGenericType
&& pi.PropertyType.BaseType.GetGenericTypeDefinition()
== typeof(GenericClass<>))
{
var propValue = pi.GetValue(obj);
if (propValue != null)
{
var description = propValue.GetType()
.GetProperty("Description").GetValue(propValue);
Console.WriteLine(description);
}
}
}
Console.ReadKey();
}
我認為這就是您所需要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.