Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当使用for语句初始化变量或使用Array.Length时,有什么更好的解决方案?_C#_Arrays - Fatal编程技术网

C# 当使用for语句初始化变量或使用Array.Length时,有什么更好的解决方案?

C# 当使用for语句初始化变量或使用Array.Length时,有什么更好的解决方案?,c#,arrays,C#,Arrays,我在阵列上完成了一些简单的任务,并完成了以下任务: 显示数组的所有元素 我对此问题的解决方案是创建一个变量n,该变量将存储Array.Length值。然后我会用它来做陈述。建议的解决方案甚至更直截了当——它只在for语句Array.Length属性中使用 我的解决方案: int[] array = { 0, 1, 3, 4, 5, 2, 1, -4, -1, 10, 55 }; int n = array.Length; for (int i = 0; i < n; i++) { Cons

我在阵列上完成了一些简单的任务,并完成了以下任务:

显示数组的所有元素

我对此问题的解决方案是创建一个变量n,该变量将存储Array.Length值。然后我会用它来做陈述。建议的解决方案甚至更直截了当——它只在for语句Array.Length属性中使用

我的解决方案:

int[] array = { 0, 1, 3, 4, 5, 2, 1, -4, -1, 10, 55 };
int n = array.Length;
for (int i = 0; i < n; i++)
{
Console.WriteLine(array[i]);
}
int[] array = { 0, 1, 3, 4, 5, 2, 1, -4, -1, 10, 55 };
for(int i = 0; i < array.Length; i++)
{
Console.WriteLine(array[i]);
}
int[]数组={0,1,3,4,5,2,1,4,1,10,55};
int n=数组长度;
对于(int i=0;i
建议的解决办法:

int[] array = { 0, 1, 3, 4, 5, 2, 1, -4, -1, 10, 55 };
int n = array.Length;
for (int i = 0; i < n; i++)
{
Console.WriteLine(array[i]);
}
int[] array = { 0, 1, 3, 4, 5, 2, 1, -4, -1, 10, 55 };
for(int i = 0; i < array.Length; i++)
{
Console.WriteLine(array[i]);
}
int[]数组={0,1,3,4,5,2,1,4,1,10,55};
for(int i=0;i
我担心的是,如果我们将Array.Length属性放在循环语句中,这意味着它将重新计算n次(其中n=Array.Length)。考虑到n可以是一个非常大的数,这不是很糟糕吗


在处理速度或已用存储方面是否有任何差异?或者它们只是相等的选项?

每次都将执行比较语句。就像其他人已经提到的:这与
Array.Length
无关,因为此属性在数组中内部存储,但是您应该避免每次都像这样计算大小:

// if the result of getSize-function never 
// changes, do not call it in the statement
for (var i = 0; i < getSize(); i++) {

}
//如果getSize函数的结果
//更改,不要在语句中调用它
对于(var i=0;i
“考虑到n可能是一个非常大的数字,这不是很糟糕吗?”--数组的长度存储在数组开头的头中--获取它非常便宜--数组的长度存储为数组的一部分。事实上,在你的例子中,JIT知道你的数组有11个元素长,并将循环硬编码为
for(int i=0;i<11;i++)
!如果它不能解决这个问题,它将获取一次数组长度并将其存储在寄存器中。除了由于无法调整数组大小而对其进行了优化之外,它与其他具有
Count
属性(如
List
)的集合应该没有多大关系。它们的实现方式应该是不需要“计算”任何东西,只需要返回一个变量值。请注意,如果在循环之前存储值,甚至可能会创建错误。如果在枚举集合时对集合进行了修改,则不会获取当前值,而是使用旧值。您也可以只使用foreach,它将被优化为相同的值@TimSchmelter我提到了一个经常导致bug或糟糕的应用程序性能的行为,它与OPs问题直接相关。我相信很多初级程序员都会感谢我的建议。我已经澄清了我的声明。