Aşağıdaki gibi bir jenerik Tipim varKapalı genel tür bilmeden genel özellik nasıl erişilir
public class TestGeneric<T>
{
public T Data { get; set; }
public TestGeneric(T data)
{
this.Data = data;
}
}
Eğer bir nesneyi (ki bazı harici kaynaklardan geliyor) varsa, bunun türünün kapalı olduğunu test ettim. TestGeneric <> TypeParameter T'yi tanıyor. Şimdi nesnemin Verilerine erişmem gerekiyor. Sorun şu ki, hangi kapalı TestGeneric'i tam olarak bildiğimden, nesneyi atamıyorum.
emin olmak için
// thx to http://stackoverflow.com/questions/457676/c-reflection-check-if-a-class-is-derived-from-a-generic-class
private static bool IsSubclassOfRawGeneric(Type rawGeneric, Type subclass)
{
while (subclass != typeof(object))
{
var cur = subclass.IsGenericType ? subclass.GetGenericTypeDefinition() : subclass;
if (rawGeneric == cur)
{
return true;
}
subclass = subclass.BaseType;
}
return false;
}
kullanıyorum, nesneyim genel tiptedir. Söz konusu kod şöyledir:
public static void Main()
{
object myObject = new TestGeneric<string>("test"); // or from another source
if (IsSubclassOfRawGeneric(typeof(TestGeneric<>), myObject.GetType()))
{
// the following gives an InvalidCastException
// var data = ((TestGeneric<object>)myObject).Data;
// if i try to access the property with reflection
// i get an InvalidOperationException
var dataProperty = typeof(TestGeneric<>).GetProperty("Data");
object data = dataProperty.GetValue(myObject, new object[] { });
}
}
Verisine bakmadan veriye ihtiyacım var (iyi, eğer GetType() kullanarak türünü sorabilirmiysem iyi olurdu, fakat gerekli değil) ToString() kullanarak xml'ye dökün.
Herhangi bir öneriniz var mı? Teşekkürler.
mümkün yinelenen (http://stackoverflow.com/questions/3059420/accessing-properties-through-: bu çok daha okunabilir kod kılan mükemmel kullanım örneği jenerik-type-parameter) –