zoukankan      html  css  js  c++  java
  • A const field of a reference type other than string can only be initialized with null Error [duplicate]

    I'm trying to create a 2D array to store some values that don't change like this.

    const int[,] hiveIndices = new int[,] {
    {200,362},{250,370},{213,410} , 
    {400,330} , {380,282} , {437, 295} ,
    {325, 405} , {379,413} ,{343,453} , 
    {450,382},{510,395},{468,430} ,
    {585,330} , {645,340} , {603,375}
    };



    But while compiling I get this error

    hiveIndices is of type 'int[*,*]'. 
    A const field of a reference type other than string can only be initialized with null.

    1 Answer

    Actually you are trying to make the array - which is a reference type - const - this would not affect mutability of its values at all (you still can mutate any value within the array) - making the array readonly would make it compile, but not have the desired effect either. Constant expressions have to be fully evaluated at compile time, hence the new operator is not allowed.

    You might be looking for ReadOnlyCollection<T>

    For more see the corresponding Compiler Error CS0134:

      http://msdn.microsoft.com/en-us/library/ms228606.aspx

        'variable' is of type 'type'. A const field of a reference type other than string can only be initialized with null.
    A constant-expression is an expression that can be fully evaluated at compile-time.
        Because the only way to create a non-null value of a reference-type is to apply the new operator, and because the new operator is not permitted in a constant-expression,
    the only possible value for constants of reference-types other than string is null.
    If you encounter this error by trying to create a const string array, the solution is to make the array readonly, and initialize it in the
    constructor.

    C#: Static readonly vs const ?

    http://stackoverflow.com/questions/755685/c-static-readonly-vs-const

        The readonly keyword is different from the const keyword. A const field can only be initialized at the declaration of the field.
    A readonly field can be initialized either at the declaration or in a constructor. Therefore, readonly fields can have different values depending on the constructor used.
    Also, while a const field is a compile-time constant, the readonly field can be used for runtime constants as in the following example:

    http://msdn.microsoft.com/en-us/library/acdd6hb7%28v=vs.100%29.aspx

     public class ReadOnlyTest
        {
           class SampleClass
           {
              public int x;
              // Initialize a readonly field
              public readonly int y = 25;
              public readonly int z;
    
              public SampleClass()
              {
                 // Initialize a readonly instance field
                 z = 24;
              }
    
              public SampleClass(int p1, int p2, int p3)
              {
                 x = p1;
                 y = p2;
                 z = p3;
              }
           }
    
           static void Main()
           {
              SampleClass p1 = new SampleClass(11, 21, 32);   // OK
              Console.WriteLine("p1: x={0}, y={1}, z={2}", p1.x, p1.y, p1.z);
              SampleClass p2 = new SampleClass();
              p2.x = 55;   // OK
              Console.WriteLine("p2: x={0}, y={1}, z={2}", p2.x, p2.y, p2.z);
           }
        }
        /*
         Output:
            p1: x=11, y=21, z=32
            p2: x=55, y=25, z=24
        */
    

      

  • 相关阅读:
    zabbix微信报警 风行天下
    centos7环境下的Mysql5.7.22安装 风行天下
    任务计划程序Windows2008及win2016计划任务定时重启 风行天下
    zabbix监控windows磁盘空间 风行天下
    redhat 7安装CentOS 7 yum源 风行天下
    rhel7配置yum的方法 风行天下
    centos7防火墙使用方法 风行天下
    rhel7配置ELK过程 风行天下
    windows巡检 风行天下
    MapX+VB 前一视图功能
  • 原文地址:https://www.cnblogs.com/chongxin/p/4170829.html
Copyright © 2011-2022 走看看