gpt4 book ai didi

c# - 使用通用参数的字符串名称构造类

转载 作者:太空宇宙 更新时间:2023-11-03 21:32:53 24 4
gpt4 key购买 nike

我有一个使用如下通用参数创建的 Json 反序列化器类:

Deserializer<T> results = Deserializer<T>.FromFile(file);

其中 T 是任意数量的类型实现的接口(interface)。

我希望以字符串形式的类名来选择 T,例如“Person”Person 类实现了 T。

所以可以这样写:

Deserializer<Type.GetType("Person")> results = Deserializer<Type.GetType("Person")>.FromFile(file);

我在上面已经试过了,但它给了我一个错误:

Using the generic type 'Deserializer<T>' requires 1 type arguments

我也看过了

http://social.msdn.microsoft.com/Forums/en-US/80690cd9-d1f2-4888-9c95-62305de9ced4/using-typegettype-with-generics

但尝试使用其中一些会导致其他错误,例如:

randomVariable is a 'field' but is used like a 'type'

是我的代码有误还是我的处理方式有误?

我怎样才能让它工作?

解决方案我的最终代码是

        Type genericType = typeof(Deserializer<>);
Type[] typeArgs = {Type.GetType("Person")};
Type deserialiserType = genericType.MakeGenericType(typeArgs);
object repository = Activator.CreateInstance(deserialiserType);

MethodInfo genericMethod = deserialiserType.GetMethod("FromFile");
genericMethod.Invoke(repository, new[] {file});

谢谢大家的帮助

最佳答案

将 ModiX 链接中的答案应用于您的代码,应该会产生如下结果:

Type genericType = typeof(Deserializer<>);
Type[] typeArgs = { Type.GetType("Person") };
Type deserializerType = genericType.MakeGenericType(typeArgs);

object deserializer = Activator.CreateInstance(deserializerType);

MethodInfo fromFileMethod = deserializerType.GetMethod("FromFile");
fromFileMethod.Invoke(deserializer, new[] { file });

线

MethodInfo closedMethod = genericMethod.MakeGenericMethod(typeof(Something));

如果您的方法是通用的,则使用它,在您的情况下,如果它看起来像这样:

Deserializer<T>.FromFile<T2>(...)

关于c# - 使用通用参数的字符串名称构造类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23399301/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com