如果我有课程:
class Useless
{
private string _message ;
public Useless(string message)
{
_message = message;
}
}
class UselessFactory<T> where T : new()
{
public Useless CreateUseless(string msg)
{
return new T(msg);
}
}
为什么我不能用参数实例化T,就像我可以用以下内容一样?
return (Useless)Activator.CreateInstance(typeof(T), msg);
答案 0 :(得分:2)
新约束指定泛型类声明中的任何类型参数都必须具有公共无参数构造函数。
来自the docs
可能的解决方法(不一样)
如果您将Message
设为公共和可变属性,则可以执行以下操作:
class UselessFactory<T> where T : UselessBase, new()
{
public T CreateUseless(string msg)
{
return new T() { Message = msg };
}
}
答案 1 :(得分:1)
您可以执行以下操作:
return (T)Activator.CreateInstance(typeof(T), new object[] { msg });
我从这个问题中得到了它:https://stackoverflow.com/a/731637/1522991
答案 2 :(得分:1)
目前根本不支持。
有解决方法:
Func<string, T>
)。您可以调用此委托,该委托将使用给定参数构造实例。