有很多C++背景我已经习惯了写下面的内容:
const int count = ...; //some non-trivial stuff here
for( int i = 0; i < count; i++ ) {
...
}
Run Code Online (Sandbox Code Playgroud)
我希望在C#中也能正常工作.然而...
byte[] buffer = new byte[4];
const int count = buffer.Length;
Run Code Online (Sandbox Code Playgroud)
产生错误CS0133:分配给'count'的表达式必须是常量.
我不明白.为什么这个无效?int是一种价值类型,不是吗?为什么我不能这样分配值并使变量不可更改?
jal*_*alf 25
因为const在C#中const比const在C++中要多得多.;)
在C#中,const用于表示编译时常量表达式.它类似于这个C++代码:
enum {
count = buffer.Length;
}
Run Code Online (Sandbox Code Playgroud)
因为buffer.Length在运行时进行求值,所以它不是常量表达式,因此会产生编译错误.
C#有一个readonly与C++有点相似的关键字const.(虽然它仍然有限,并且在C#中没有const-correctness这样的东西)
Jon*_*eet 11
const 用于表示编译时常量...而不仅仅是只读值.
我不敢在C#中指定只读但非编译时常量的局部变量.一些局部变量本质上是只读的 - 例如循环中的迭代变量foreach以及在using语句的fisrt部分中声明的任何变量.但是,您无法创建自己的只读变量.
如果const在方法中使用,则有效地将该标识符的任何用法替换为编译时常量值.就个人而言,我很少看到这在真正的C#代码中使用过.
| 归档时间: |
|
| 查看次数: |
13760 次 |
| 最近记录: |