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

标签 sharpdevelop vb.net-to-c# code-conversion

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

关于sharpdevelop - Foreach 循环 VB.Net 到 C# 代码转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15168495/

相关文章:

c# - 不使用 Visual Studio 创建 Wix Bootstrapper

c# - Infragistics WebDataGrid 按列名 : VB. 从选定的行中获取值 net 到 C# 的转换

javascript - 将自定义消息身份验证代码从 Java 转换为 JavaScript

c# - SharpDevelop 改变代码风格

c# - 有没有办法让 SharpDevelop 程序始终保持在其他窗口之上?

c# - C# 中的任何 Visual Basic 'With' 模拟?

c# - C#异常处理程序继续下一个

python - 用于函数调用的 PEP-8

.net - 有人在 SharpDevelop 中使用 System.Data.SQLite 吗?

c# - 将具有多个事件参数的 VB.NET 事件转换为 C#