if语句中的plusequal运算符

时间:2016-01-20 19:56:22

标签: c# vb.net

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语句中做我想做的事。

3 个答案:

答案 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