你可以看到我试图(但失败)用下面的代码做什么:
protected T GetObject()
{
return new T();
}
任何帮助都将不胜感激。
编辑:
具体情况如下。我用一个自定义的控制器类来派生所有的控制器,使用标准化的方法。在上下文中,我需要创建控制器类型对象的一个新实例。所以在写这篇文章的时候,它是这样的:
public class GenericController<T> : Controller
{
...
protected T GetObject()
{
return (T)Activator.CreateInstance(ObjectType);
}
public ActionResult Create()
{
var obj = GetObject()
return View(obj);
}
所以我认为反思在这里是最简单的。我同意,当然考虑到问题的初始陈述,最合适的答案是使用new()约束。我已经搞定了。
看看新的约束
public class MyClass<T> where T : new()
{
protected T GetObject()
{
return new T();
}
}
T可以是一个没有默认构造函数的类:在这种情况下,new T()将是一条无效语句。new()约束说T必须有一个默认构造函数,这使得new T()合法。
你可以把同样的约束应用到一个泛型方法上:
public static T GetObject<T>() where T : new()
{
return new T();
}
如果你需要传递参数:
protected T GetObject(params object[] args)
{
return (T)Activator.CreateInstance(typeof(T), args);
}
看看新的约束
public class MyClass<T> where T : new()
{
protected T GetObject()
{
return new T();
}
}
T可以是一个没有默认构造函数的类:在这种情况下,new T()将是一条无效语句。new()约束说T必须有一个默认构造函数,这使得new T()合法。
你可以把同样的约束应用到一个泛型方法上:
public static T GetObject<T>() where T : new()
{
return new T();
}
如果你需要传递参数:
protected T GetObject(params object[] args)
{
return (T)Activator.CreateInstance(typeof(T), args);
}