初学,常量 byte[] 不能初始化时赋值吗? const byte[] auchCRCLo= {0x00,0xc0,0xc1,0x01,0xc3,0x03,0x02,0xc2}编译不通过啊,变量可以.请问常量有什么好方法? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 定义为static readonly除了string外,其他的引用类型如果定义成const只能初始化为null 8个字节刚好一个ulong可以const 不可以。只有简单类型(int float char 等值类型,以及string)可以使用const。对于引用类型,是不可以的。即便你使用 readonly 修饰一个引用类型,也只是说这个引用是只读的,而不是说引用的对象是只读的。比如readonly byte[] auchCRCLo = { 0x00, 0xc0, 0xc1, 0x01, 0xc3, 0x03, 0x02, 0xc2 };auchCRCLo = new byte[] { }; //错误,因为引用是只读的。auchCRCLo[1] = 0x00; //正确,因为引用指向的对象仍然可以改写。2L的办法是一种变通的办法。 C#语法上是允许引用类型为const的,只是只能初始化为null而已(string除外),因此没有什么实际用途至于元素只读,定义成long是个好主意,但显然没什么通用性,更通用的做法是提供运行期检查:static readonly IList<byte> auchCRCLo = new List<byte> { 0x00, 0xc0, 0xc1, 0x01, 0xc3, 0x03, 0x02, 0xc2 }.AsReadOnly(); 只有简单类型(int float char 等值类型,以及string)可以使用const。 OracleConnection 链接oracle怎么连接不上服务器。。求助 如何取到gridview特定行的某一字段 怎样在WPF运动的3D物体表面上贴上2D内容? 有用过MapX开发地理系统的高手吗,请教一下 使用webservice上传文件夹 C#硬件技术 如何将byte[]存在文件中? 用什么方法能快速的把datatable写入excel 求救,数据库问题! TreeNode 如何隐藏? 关于回调函数怎样改写成c# 两个问题
除了string外,其他的引用类型如果定义成const只能初始化为null
只有简单类型(int float char 等值类型,以及string)可以使用const。对于引用类型,是不可以的。即便你使用 readonly 修饰一个引用类型,也只是说这个引用是只读的,而不是说引用的对象是只读的。比如
readonly byte[] auchCRCLo = { 0x00, 0xc0, 0xc1, 0x01, 0xc3, 0x03, 0x02, 0xc2 };auchCRCLo = new byte[] { }; //错误,因为引用是只读的。
auchCRCLo[1] = 0x00; //正确,因为引用指向的对象仍然可以改写。2L的办法是一种变通的办法。
至于元素只读,定义成long是个好主意,但显然没什么通用性,更通用的做法是提供运行期检查:
static readonly IList<byte> auchCRCLo = new List<byte> { 0x00, 0xc0, 0xc1, 0x01, 0xc3, 0x03, 0x02, 0xc2 }.AsReadOnly();