獲取列表<>我有一個特殊的情況,其中在反射器之一,我可以得到不同類型,我需要reinflate容器(如使克隆)。這開始發生時,新類型的容器中引入(ObservableCollection<T>
)反思從列表中<T>(從通用容器類型的容器類型)
在克隆機理是什麼,我發現是這樣的:
if (property.PropertyType.FullName.Contains(ReflectorResources.ListName) || property.PropertyType.FullName.Contains("ConcurrentBag"))
{
var listElementType = property.PropertyType.GenericTypeArguments[0];
var newList = (property.PropertyType.FullName.Contains(ReflectorResources.IncidentListName))
? Activator.CreateInstance(typeof(Definitions.Session.Products.Motor.IncidentList<>).MakeGenericType(listElementType))
: property.PropertyType.FullName.Contains("ConcurrentBag") ? Activator.CreateInstance(typeof(ConcurrentBag<>).MakeGenericType(listElementType)) : Activator.CreateInstance(typeof(List<>).MakeGenericType(listElementType));
var oneItem = Activator.CreateInstance(listElementType);
}
於是,我就重寫一遍,如:
if (new[] { ".Collections." }.Any(o => property.PropertyType.FullName.Contains(o)))
{
var listElementType = property.PropertyType.GenericTypeArguments[0];
var listType = property.PropertyType;
var constructedListType = listType.MakeGenericType(listElementType);
var newList = Activator.CreateInstance(constructedListType);
var oneItem = Activator.CreateInstance(listElementType);
}
然而,它爆炸了:var constructedListType = listType.MakeGenericType(listElementType);
帶有錯誤
System.InvalidO perationException:只能在Type.IsGenericParameter爲true的Type上調用方法。
我的猜測是,我需要提取List<Something>
List<>
型...
我如何獲得普通容器類型容器類型?
快速評論:你爲什麼不直接調用Property.PropertyType的CreateInstance? –