Во-первых, позвольте мне сказать, что я хочу получить значение свойства в универсальном классе, которое может быть переопределено классом, который наследует от него. Думайте об этом в базовом классе как о значении по умолчанию, которое наследник класса может переопределить, чтобы установить свое собственное значение по умолчанию.
Я пытался использовать отражение непосредственно для типа, используя System.Reflection.FieldInfo.GetValue, но это не работает для классов с универсальными типами. Поэтому я думаю, что мне нужно создать экземпляр класса, чтобы увидеть значение.
«Типы», которые у меня есть, я извлек, прочитав библиотеки DLL в корзине и используя Reflection, чтобы найти типы, которые наследуются от моего интерфейса.
Я использую .NET 4.5
вот документация, которая, кажется, точно объясняет, что мне нужно сделать http://msdn.microsoft.com/en-us/library/b8ytshk6.aspx
В этой документации единственное различие, которое я вижу, это то, как мы получили наши типы, я искал типы в корзине, и они просто вызывали typeof(). Поскольку типы настолько сложны, кажется, что это может быть вероятное несоответствие, но я не вижу чего не хватает (если что)
foreach (var item in types)
{
var ts = item.GetField("DefaultTimeToExpire");
Type[] typeArguments = item.GetGenericArguments();
if (ts != null)
{
var t = item.MakeGenericType(typeArguments);
var obj = Activator.CreateInstance(t);
var timespan = obj.DefaultTimeToExpire;
subscriberInfos.Add(new Tuple<string, Type, TimeSpan>(item.Name, item, timespan));
}
}
Я звоню в GetField для поиска элементов с полем «DefaultTimeToExpire», пока эта часть работает хорошо, чтобы найти нужный мне тип. Затем я вызываю GetGenericArguments, который возвращает ожидаемый массив типа Arguments. затем я вызываю MakeGenericType и, наконец, создаю экземпляр, который дает мне сообщение об ошибке
«Невозможно создать экземпляр BusinessLogic.TestSubscriberXXX`1[Message], поскольку Type.ContainsGenericParameters имеет значение true».
Похоже, это именно то, что я должен делать. Спасибо
typeArguments
недостаточно типов, чтобы установить все параметры универсального типа? - person Dan Puzey   schedule 29.08.2012