这是 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 就此发表博客文章之前,真正的原因仍然未知