У меня есть общий тип следующим образом
public class TestGeneric<T>
{
public T Data { get; set; }
public TestGeneric(T data)
{
this.Data = data;
}
}
Если у меня теперь есть объект (который поступает из какого-то внешнего источника), из которого я знаю, что его тип имеет какой-то закрытый TestGeneric <>, но я не знаю TypeParameter T. Теперь мне нужен доступ к данным моего объекта. Проблема в том, что я не могу привести объект, так как не знаю точно, к какому закрытому TestGeneric.
Я использую
// thx to /381108/proverte-yavlyaetsya-li-klass-proizvodnym-ot-universalnogo-klassa
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;
}
чтобы убедиться, что мой объект имеет общий тип. Код, о котором идет речь, выглядит следующим образом:
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[] { });
}
}
Мне нужны Данные независимо от их типа (ну, если бы я мог запросить их тип, используя GetType (), это было бы хорошо, но не обязательно), так как я просто хочу вывести их в xml, используя ToString ().
Есть предложения? Thanx.