c# - 是否可以更改原始数据类型的默认值?

标签 c# generics list struct value-type

我最近创建了一个通用 Matrix 类,它充当 List> 集合的包装器。据我所知,这个类(class)运行得很好。关于 T 的默认值,我遇到了一个小问题。

我创建了一个 Matrix(3, 3) 实例,它创建了一个 3x3 整数矩阵,使用 default(T) 全部默认为 0。我知道值类型(包括基元)默认为 0 等价物,而引用类型默认为 null。我想知道是否可以更改此默认值,以便如果将值类型传递到矩阵中,它将填充为 5,而不是 0。

我尝试创建自己的结构体(值类型),但由于无法在结构体内部使用无参数构造函数,我找不到更改默认值 0 的方法。

我怀疑更改默认值是不可能的,并且在实例化矩阵后,我必须逐个单元地循环它,但我想在此处询问以防万一,然后再这样做。

最佳答案

 public Matrix(int width, int height) : this(width, height, default(T)) {}
 public Matrix(int width, int height, T defaultValue)
 {
     List<T> rows = new List<T>(height);
     for (int i = 0; i < height; i++)
     {
         List<T> columns = new List<T>(width);
         for (int j = 0; j < width; j++)
         { columns.Add(defaultValue); }
         rows.Add(columns);
     }
     // store `rows` wherever you are storing it internally.
 }

但正如 Joseph 所说,无法设置 default(T) 的计算结果。

关于c# - 是否可以更改原始数据类型的默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1604213/

相关文章:

c# - Count() 在使用 LINQ 填充的 IEnumerable<T> 上返回错误结果

c# - PowerShell 与 MongoDB C# 驱动程序的方法不兼容?

list - 在 Haskell 中过滤元组列表

c# - 将枚举与列表进行比较<int>

c# - 如何在没有污染方法的情况下登录?

C#:如何比较两个日期

c# - 如何防止小数点。TryParse将“,”转换为“。”?

C# 反射 : providing T for a generic method

c# - 将不同的泛型存储在单个可枚举中

php - php文件函数列表