我正在尝试获取我无法编辑的自定义类的类型,并且它的声明上有一个参数类型约束。就像这样:
public class GenericItemCollection<T> where T : System.IEquatable<T>
{
public GenericItemCollection();
public GenericItemCollection(string json);
public int Count { get; }
public List<T> Created { get; }
public List<T> Current { get; }
public List<T> Deleted { get; }
public List<T> Original { get; }
public List<T> Updated { get; }
public void AcceptChanges();
public void AddItem(T item);
public void BindItem(T item);
public void DeleteItem(T item);
public void UpdateItem(T item);
}
}
所以我想要的是当T实际上是某种东西时的GenericItemCollection类型。即:
private void MyMethod<T>(GenericItemCollection<T> genericList){
Type listType = typeof(GenericItemCollection<typeof(T)>);
//...
}
将被称为:
MyMethod<Foo>(fooGenericList);
MyMethod<Bar>(barGenericList);
在这种情况下,我希望listType为
GenericItemCollection<Foo>
和
GenericItemCollection<Bar>
我知道typeof(T)在运行时之前不会存在但它应该返回一个Type而不管VS只是说“Type expected”
GenericItemCollection<typeof(T)>
我不是那么精通使用Generics,所以我显然缺少一些东西,我希望你们指出那是什么。非常感谢。
答案 0 :(得分:1)
首先,对GenericItemCollection
的泛型类型参数应用的任何约束也必须应用于MyMethod
的泛型类型参数
private void MyMethod<T>(GenericItemCollection<T> genericList) where T: IEquatable<T>
然后,只需将typeof(T)
替换为T
Type listType = typeof(GenericItemCollection<T>);