这是VB.Net中的代码
If Not queryItems Is Nothing Then
For Each qItem As String In queryItems
qItem = qItem.ToLower()
Next
End If
它和#34;相当于" c#中的代码(使用sharpdevelop / developerfusion / telerik' s转换器/ 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中允许这种行为?
答案 0 :(得分:2)
问题的症结似乎是这个
我想知道为什么在VB.Net中允许这种行为?
更好的问题可能是以下
为什么C#会阻止赋值给foreach迭代变量?
如果你看一下lopping结构和语言的集合,C#就是这里的奇怪球。在几乎所有其他情况下(即使在Java foreach
中),分配给循环结构的迭代变量是合法的。我知道的唯一其他案例是
for
语句VB.Net实际上比C#更符合规范。
不幸的是,不清楚为什么C#做出了这个选择。那里有很多推测性的答案,但在埃里克或安德斯发表关于此事的博客文章之前,真正的原因仍然未知
答案 1 :(得分:1)
想要在循环中将每个字符串(一个数组?一个列表?)设置为小写是完全合理的。
建议:只需使用旧的“for()”循环 -
// Assuming array syntax...
if (queryItems != null)
{
for (int i=0; i < queryItems.Length; i++)
{
queryItems[i] = queryItems[i].ToLower();
}
}
... IMHO
PS: 我不确定VB.Net版本是否真的按预期工作。你知道吗?