gpt4 book ai didi

c# - 如何将 typeName 字符串转换为泛型?

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

这个问题的上下文是一个 MVC 应用程序,它接受字符串并希望将它们转换为类型并将它们交给通用代码。

  • 我有一个输入类型的字符串表示。
  • 我似乎永远无法输入 Type <> 内的变量对于通用方法。
  • 这是否意味着我必须手动拼出所有可能的情况和通用方法调用?这是正确的方法吗?
  • 如果 ModelBinder 就好了可以以某种方式找出我可以为操作方法提供通用类型参数的类型 public ActionResult Something<T>() .但我不知道这是否可能。

例子

public ActionResult DoSomething(string typeName, int? id)
{
var type = Type.GetType(typeName);
if (type == typeof(Apple)) DoSomethingElse<Apple>(id);
if (type == typeof(Orange)) DoSomethingElse<Orange>(id);
//if etc ... to infinity
}

最佳答案

如果您只有类型,那么您必须通过反射来获取所有类型。假设“DoSomethingElse”是当前类中的一个方法:

public ActionResult DoSomething(string typeName, int? id)
{
Type thisType = this.GetType(); // Get your current class type
var type = Type.GetType(typeName);
MethodInfo doSomethingElseInfo = thisType.GetMethod("DoSomethingElse");
MethodInfo concreteDoSomethingElse = doSomethingElseInfo.MakeGenericMethod(type);
concreteDoSomething.Invoke(this, null);
}

这应该对您有用,但您应该注意,它不会很漂亮! ;)

关于c# - 如何将 typeName 字符串转换为泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10889273/

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