我有这样的东西
V Func<V>()
{
// do stuff
V res = default(V);
// more stuff
return res;
}
问题是我希望 res 为 0 或 V 的新实例
我尝试创建两种方法
Func<V> where T: new()
Func<V> where T: struct
但令人惊讶的是这是不允许的
我的解决方法是有两个函数
FuncNew<V> where T: new()
...
res = new V();
....
和
FuncDefault<V> where T: struct
...
res = default(V)
...
编辑:总结答案
new(T) 将新建一个引用或值类型;我没有意识到
最佳答案
您可以使用new()
约束:
private V Func<V>() where V : new()
{
// do stuff
V res = new V();
// more stuff
return res;
}
值类型将被初始化为全零,任何引用类型将使用其无参数默认构造函数进行初始化。
如果引用类型没有无参数构造函数,则不能与此方法一起使用,并且您必须使用其他方法(SO 上其他地方有很多解决此问题的方法,例如 Passing arguments to C# generic new() of templated type )
关于c# - 如何创建一个通用方法,可以将 value 变量初始化为 0 或将 ref 变量初始化为 new (不为 null),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6050592/