Skip to main content
 首页 » 编程设计

sharpdevelop之Foreach 循环 VB.Net 到 C# 代码转换

2024年12月31日18cloudgamer

这是 VB.Net 中的代码

If Not queryItems Is Nothing Then 
                For Each qItem As String In queryItems 
                    qItem = qItem.ToLower() 
                Next 
End If 

它是 c# 中的“等效”代码(使用 sharpdevelop/developerfusion/telerik 的转换器/VS 2012“粘贴为 c#”方法)

if (queryItems != null) 
{ 
    foreach (string qItem in queryItems) 
    { 
        qItem = qItem.ToLower(); 
    } 
} 

C# 编译器(正确的)提示如下

"Cannot assign to 'qItem' because it is a 'foreach iteration variable'" 

我想知道为什么在 VB.Net 中允许这种行为?

请您参考如下方法:

问题的症结似乎是这个

I am wondering why this behavior is permitted in VB.Net?

一个更好的问题可能是下面的

Why did C# prevent assignment to the foreach iteration variable?

如果您查看一组循环结构和语言,C# 就是其中的佼佼者。在几乎所有其他情况下(甚至在 Java foreach 中),分配给循环构造的迭代变量都是合法的。我知道的唯一其他情况是

  • F#:默认情况下变量是只读的,所以这只是与其他语言的一致性
  • Ada:不允许在 for 语句中分配循环值

VB.Net 实际上在这里比 C# 更符合规范。

遗憾的是,尚不清楚 C# 做出此选择的原因。那里有很多推测性的答案,但在 Eric 或 Anders 就此发表博客文章之前,真正的原因仍然未知