我正在尝试创建泛型类的实例,而不知道在运行时将其强制转换为什么类型.我写了以下代码
Type pType = propertyInfo.GetType();
ObjectComparer<pType> oc = new ObjectComparer<pType>();
Run Code Online (Sandbox Code Playgroud)
希望这可以让你知道我正在尝试做什么,但它不会编译它只是说
"无法找到类型或命名空间pType".
这有什么简单的方法吗?
谢谢
加文
Mar*_*ell 10
Type type = typeof(ObjectComparer<>).MakeGenericType(pType);
object obj = Activator.CreateInstance(type);
Run Code Online (Sandbox Code Playgroud)
但是,除非您转换为非泛型接口(IComparer可能),否则您将失去将其用作泛型类型的能力.
这里最常见的答案是非泛型基类/接口:
interface ISomeInterface {
object SomeMethod(object value);
}
interface ISomeInterface<T> : ISomeInterface {
T SomeMethod(T value);
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过非泛型调用,ISomeInterface而无需跳过任何额外的环.
使用MakeGenericMethod下面的示例- 但非通用的基本接口会更有效:
class Program {
static void Main() {
int i = 123;
typeof(Program).GetMethod("Foo",
BindingFlags.Static | BindingFlags.NonPublic)
.MakeGenericMethod(i.GetType())
.Invoke(null, new object[] { i });
}
static void Foo<T>(T value) {
ObjectComparer<T> comparer = new ObjectComparer<T>();
comparer.Bar(value);
}
}
class ObjectComparer<T> {
public void Bar(T value) {
Console.WriteLine(typeof(T).Name + " = " + value);
}
}
Run Code Online (Sandbox Code Playgroud)