是否有可能改变一个基本数据类型的默认值?(Is it possible to change the

2019-08-31 08:12发布

我最近创建了一个通用矩阵<T>类充当围绕一个List <名单<T >>集合的包装。 据我所知,这个类可以正常使用。 我遇到了一个小问题,虽然有关的T的默认值。

我创建矩阵的一个实例<int>的(3,3),这产生整数的3×3矩阵,全部采用默认(T)默认为0。 我知道值类型(包括图元)默认为0当量,和引用类型默认为空。 我想知道是否有可能改变这个默认值,这样,如果一个值类型传递到矩阵,将它与5周的例如,而不是0的填充。

我试图创造我自己的结构(值类型),但由于不能够使用内部结构参数构造函数,我不能找到一种方法,从0更改默认值。

我怀疑更改默认值是不可能的,我会通过细胞矩阵单元格必须循环已被实例化后,但我想在这里问的,以防万一我这样做了。

Answer 1:

 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.
 }

但约瑟夫说,有没有设置什么样的方式default(T)的计算结果为。



Answer 2:

有没有办法来改变像你如何描述缺省值。

var someInt = default(int); //this will always be 0, you can't change it
var someReference = default(SomeClass); //this will always be null

下面是一个MSDN文章就可以了,虽然它不是比什么已经不幸的是说得多描述。



Answer 3:

你可以封装它的价值,只与你想要的默认值的偏移公开它的结构:

public struct DefaultFiveInteger {

   private int _value;

   public DefaultFiveInteger(int value) {
      _value = x - 5;
   }

   public static implicit operator int(DefaultFiveInteger x) {
      return x._value + 5;
   }

   public static implicit operator DefaultFiveInteger(int x) {
      return new DefaultFiveInteger(x);
   }

}

现在,你可以声明被初始化为默认值(0)的变量,它会返回一个偏移值:

DefaultFiveInteger x;
Console.Write(x);

输出:

5


Answer 4:

那么既然你在寻找结构已经,可以按如下方式模拟的默认值:

public struct MyInt
{
    private int _defaultInt;
    public int DefaultInt
    {
        get
        {
            if (_defaultInt == 0)
                return 5;
            else
                return _defaultInt;
        }
        set
        {
            _defaultInt = value;
        }
    }
}


Answer 5:

我执行的理解default(T)是运行时,默认情况下,零出内存的应用程序请求,和C#也就是分配的空间而没有覆盖零。 它碰巧的是,非数字类型的默认值(例如空引用,假)被表示为在存储器零。 这可能会导致一些奇怪的行为; 例如, default(MyEnumType)将是,即使你从来没有指定一个枚举值等于零为零。



Answer 6:

结合Guffa的和道格·琼斯的想法,你可能会抵消性能衬件。

public struct MyInt
{
    private const int INT_DEFAULT = 5;
    private int _defaultInt;
    public int DefaultInt
    {
        get { return _defaultInt + INT_DEFAULT; }
        set { _defaultInt = value - INT_DEFAULT; }
    }
}


文章来源: Is it possible to change the default value of a primitive data type?