这个问题的上下文是一个MVC应用程序,它接受字符串并希望将它们转换为类型并将它们移交给通用代码。
Type
内放置<>
变量用于泛型方法。 ModelBinder
能够以某种方式找出我可以拥有Action Method 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
}
答案 0 :(得分:1)
如果你只有这种类型,那么你必须通过反射来完成它。假设“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);
}
那应该适合你,虽然你应该注意,它不会很漂亮! ;)
答案 1 :(得分:1)
由于您不是实际调用DoSomething
的人,因为它是控制器方法,因此无法将类型分配给方法,例如:
public ActionResult DoSomething<T>(int? id)
由于它是调用该方法的IIS,因此您没有任何方式来分配此类型。现在我不知道有关路由的所有信息,所以也许它可以用路由,但对我来说似乎不太可能。看起来你正在使用枚举,所以也许你可以使用enum.Parse来实例化或创建一个能够根据类型确定它的int的扩展方法。