Mam ogólny typ następującoJak uzyskać dostęp do właściwości rodzajowe bez znajomości zamkniętą ogólny typ
public class TestGeneric<T>
{
public T Data { get; set; }
public TestGeneric(T data)
{
this.Data = data;
}
}
Jeśli mam teraz obiekt (który pochodzi z jakiegoś zewnętrznego źródła), z którego wiem, że jest to rodzaj jest z zamkniętego TestGeneric <>, ale nie znam TypeParameter T. Teraz muszę uzyskać dostęp do danych mojego obiektu. Problem polega na tym, że nie mogę rzucić obiektu, ponieważ nie wiem dokładnie, który zamknięty testGeneric.
używam
// 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;
}
, aby upewnić się, mój obiekt jest typu rodzajowego. Kod w pytanie jest następujące:
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[] { });
}
}
muszę danych niezależnie od jego typu (dobrze, jeśli mogę prosić o jej rodzaju przy użyciu GetType() byłoby w porządku, ale nie jest to konieczne), ponieważ chcę tylko zrzuć go w xml używając ToString().
Wszelkie sugestie? Thanx.
możliwy duplikat [Właściwości Uzyskiwanie dostępu przez Generic parametrem type] (http://stackoverflow.com/questions/3059420/accessing-properties-through- rodzajowy parametr) –