• 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
        */
    

      

  • 相关阅读:
    postgresql字符串函数
    ruby中的设计模式--策略模式
    (转)MySQL 性能优化的最佳20多条经验分享
    (转)ruby中的设计模式--模板方法
    观察者模式的应用
    postgresql的ARRAY_TO_STRING
    ruby和javascript的观察者模式
    mysql表连接的时候注意事项
    checkbox记忆功能的实现
    order by的注意事项
  • 原文地址:https://www.cnblogs.com/chongxin/p/4170829.html
Copyright © 2020-2023  润新知