C# 为什么不能将Array.Length和Array.Count()分配给常量值? 我想遵循一些优秀的C++建议,计算数组长度一次,然后使用一个值,而不必调用函数SO:

C# 为什么不能将Array.Length和Array.Count()分配给常量值? 我想遵循一些优秀的C++建议,计算数组长度一次,然后使用一个值,而不必调用函数SO:,c#,arrays,constants,C#,Arrays,Constants,而不是: for( int i = 0; i < arr.length; ++i ) for(int i=0;i

而不是:

for( int i = 0; i < arr.length; ++i )
for(int i=0;i
我写

const int size = arr.length; // or arr.Count()
for( int i = 0; i < size; ++i )
const int size=arr.length;//或arr.Count()
对于(int i=0;i

读取不同的线程()之后,我注意到性能增益是不确定的,这是C++而不是C++。p> 第二个原因是使用值初始化数组:

const int size=阵列长度

int[]素数=新的int[size]

所以我的问题是:

为什么我不能申报呢?它向我吐露了错误:

错误2分配给“length”的表达式必须是常量

这很让人困惑,因为我的值是常量。然而,当我删除
常量时,
,poof会显示消息。。。什么

长度的初始化为:

public int Length{get;}
来自MSDN。这尤其令人困惑,因为我的最后一个问题明确地回答了我“不可能只声明get和leave set不存在。”


我不清楚为什么我可以声明
int size=arr.Length
,但不能声明
const int size=arr.Length
。为什么会这样?

C中的
const
定义需要一个可在编译时计算的初始值设定项


您可以使用
readonly

关键字
const
要求在编译时知道值-编译代码时,.Net编译器无法确定
arr.length
的值,因此无法将其分配给
const

关于最后一个关于getter和setter的问题,只有在使用快捷语法时,才能声明这两个函数:即
private long n{get;private set;}
。如果对本地字段使用完整、详细的属性声明,则可以仅声明一个get:

private long _n = 0;
private long N { get { return _n; } }

这是一堆重复的问题。简单的回答是C中的const表示编译时间常数,而不是在C++中,它指的是一次赋值。