const byte[] auchCRCLo= {0x00,0xc0,0xc1,0x01,0xc3,0x03,0x02,0xc2}编译不通过啊,变量可以.
请问常量有什么好方法?

解决方案 »

  1.   

    定义为static readonly
    除了string外,其他的引用类型如果定义成const只能初始化为null
      

  2.   

    8个字节刚好一个ulong可以const
      

  3.   

    不可以。
    只有简单类型(int float char 等值类型,以及string)可以使用const。对于引用类型,是不可以的。即便你使用 readonly 修饰一个引用类型,也只是说这个引用是只读的,而不是说引用的对象是只读的。比如
    readonly byte[] auchCRCLo = { 0x00, 0xc0, 0xc1, 0x01, 0xc3, 0x03, 0x02, 0xc2 };auchCRCLo = new byte[] { }; //错误,因为引用是只读的。
    auchCRCLo[1] = 0x00; //正确,因为引用指向的对象仍然可以改写。2L的办法是一种变通的办法。
      

  4.   

    C#语法上是允许引用类型为const的,只是只能初始化为null而已(string除外),因此没有什么实际用途
    至于元素只读,定义成long是个好主意,但显然没什么通用性,更通用的做法是提供运行期检查:
    static readonly IList<byte> auchCRCLo = new List<byte> { 0x00, 0xc0, 0xc1, 0x01, 0xc3, 0x03, 0x02, 0xc2 }.AsReadOnly();
      

  5.   

    只有简单类型(int float char 等值类型,以及string)可以使用const。