c# - 如何创建一个通用方法,可以将 value 变量初始化为 0 或将 ref 变量初始化为 new (不为 null)

标签 c# generics

我有这样的东西

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/

相关文章:

c# - 传递参数并从线程检索返回结果

c# - 服务安装程序类可以在不同的程序集中运行吗?

java - 使用具体类型的类创建列表

java - Java中的类转换异常: cannot be cast

c# - 执行 Action 并返回相同枚举的 .Net Enumerable 扩展

c# - 如何在 C# 中序列化/反序列化不可变列表类型

c# - WriteOnly属性还是方法?

java - 为什么 Java 8 泛型类型推断会选择这种重载?

java方法返回类型

c# - 如何使用BinaryReader Read方法读取动态数据?