转换时错误,增强了使用 java 到 c# 的循环

本文关键字:java 循环 错误 增强 转换 | 更新日期: 2023-09-27 17:56:23

我尝试在我的 C# 代码中增强 Java 代码的 for 循环:

for (float value : array) {
    if (Float.isInfinite(value) || Float.isNaN(value)) {
        value = 0;
    }
}

我试过了:

foreach (float value in array)
{
    if (float.IsInfinity(value) || float.IsNaN(value))
    {
        value = 0;
    }
}

但是我有这个错误告诉我我无权修改值,因为它是一个迭代变量。

转换时错误,增强了使用 java 到 c# 的循环

如果要更新迭代器变量,则需要使用法线 for 循环:

for(int i = 0 ; i < array.Length; i++)
{
    if (float.IsInfinity(array[i]) || float.IsNaN(array[i]))
    {
        array[i] = 0;
    }
}

从 C# 规范:

迭代变量对应于具有 扩展到嵌入语句的范围。在执行期间 foreach 语句,迭代变量表示集合 元素,当前正在为其执行迭代。一个 如果嵌入语句尝试修改,则会发生编译时错误 迭代变量(通过赋值或 ++ 和 -- 运算符)或 将迭代变量作为 ref 或 out 参数传递。