int toAdd = 0;
List<int> list = new List<int> {1500, 1500, 1200, 1200, 1100, 1100, 1100, 1100, 1000, 1000, 900, 900, 600, 600, 600, 600, 400, 400, 400, 400};
for (int i = 0; i < list.Count; i++)
{
if ((toAdd += list[i]) <= (3000 - list[i]))
{
这个c#代码有效,这个vb代码没有:
Dim toAdd As Integer = 0
Dim list As New List(Of Integer)() From {1500, 1500, 1200, 1200, 1100, 1100, 1100, 1100, 1000, 1000, 900, 900, 600, 600, 600, 600, 400, 400, 400, 400}
For i As Integer = 0 To list.Count - 1
If (toAdd += list(i)) <= (3000 - list(i)) Then
我已经确定问题是'+ ='运算符,如果我删除'='它会神奇地起作用。
vb.net是否以不同于c#的方式处理'+ ='?我无法理解我应该如何在vb中的if语句中做我想做的事。
答案 0 :(得分:6)
您无法在Visual Basic中执行此操作。
在C#中,赋值被视为表达式。在VB中,它们是语句,但不是表达式。所以这个语句在C#中有效,但不是VB(即使你删除分号):
Content-Length
或者,换句话说,C#中的赋值表达式返回一个值。在VB中,赋值语句不返回值。
答案 1 :(得分:4)
这可以让你做你需要做的事。
Dim toAdd As Integer = 0
Dim list As New List(Of Integer)() From {1500, 1500, 1200, 1200, 1100, 1100, 1100, 1100, 1000, 1000, 900, 900, 600, 600, 600, 600, 400, 400, 400, 400}
For i As Integer = 0 To list.Count - 1
toAdd = toAdd + list(i)
If toAdd <= (3000 - list(i)) Then
答案 2 :(得分:1)
我不认为VB.Net支持您尝试做的事情。考虑x = y = z
。它不会将其评估为set y = z, then set x = y
,它会将其评估为set x equal to the result of whether y is equal to z
。我认为它期望+ =是一个完整的语句,而不是子表达式的一部分。它的内部存在,如果它搞砸了。因此,我认为最好的结果是从if语句中删除它。
For i As Integer = 0 To list.Count - 1
toAdd = toAdd + list(i)
If toAdd <= (3000 - list(i)) Then