【发布时间】:2010-08-10 17:23:58
【问题描述】:
我想遵循一些优秀的 C++ 建议,计算一次数组长度,然后使用一个值,而不必像这样调用函数:
代替:
for( int i = 0; i < arr.length; ++i )
我写
const int size = arr.length; // or arr.Count()
for( int i = 0; i < size; ++i )
在阅读了不同的线程 (Is it costly to do array.length or list.count in a loop) 后,我注意到性能提升没有实际意义,而且这是 C# 而不是 C++。
第二个原因是用一个值来初始化我的数组:
const int size = arr.Length;
int[] primes_ = new int[size];
所以我的问题是这样的:
为什么我还是不能声明呢?它向我吐出错误:
Error 2 The expression being assigned to 'length' must be constant
这很令人困惑,因为我的值是不变的。但是,当我删除const 时,会发出消息。 ...什么?
Length 的初始化为:
public int Length {get;} 来自 MSDN。这尤其令人困惑,因为我的最后一个问题 (Get-Set Accessor functionality differs on existence of get-set keyword) 明确地给了我“不可能只声明 get 和 leave set 不存在”的答案。
我不清楚为什么我可以声明int size = arr.Length,但不能声明const int size = arr.Length。为什么会这样?
【问题讨论】:
-
这是一堆问题的重复。简单的答案是 C# 中的 const 意味着编译时间常数,而不是像 c++ 中的那样,它意味着分配一次