Как перейти к следующему элементу, если текущая переменная равна нулю - PullRequest
2 голосов
/ 02 декабря 2011

У меня есть функция, которая получает список имен устройств и сохраняет их в переменной.Затем следующим шагом будет получение информации с использованием 1 имени устройства на строку и продолжение работы до завершения цикла.

 String text = "";
        String errors = "";

    for (int i = 0; i < collection.Result.Count; i++)
    {
        deviceNames += collection.Result[i].DeviceName + Environment.NewLine;

        getvirtuals.Location = deviceNames;
        var virtuals = client.GetKnownVirtuals(getvirtuals, LtmKeyType.VirtualAddressPort);

        if (virtuals.Result == null)
        {
            i++;
            getvirtuals.Location = deviceNames;

        for (int v = 0; v < virtuals.Result.Count; v++)
                {
                try
                {
                    LtmKey virtualKey = new LtmKey();
                    virtualKey.Location = virtuals.Result[v].Location;
                    virtualKey.LocationType = virtuals.Result[v].LocationType;
                    virtualKey.Key = virtuals.Result[v].Key;
                    virtualKey.KeyType = LtmKeyType.VirtualAddressPort;

                    virtualKey.AdminGroup = admingroupComboBox.Text;


                    var memberStatus = client.GetMemberStatus(virtualKey);


                    for (int j = 0; j < memberStatus.Result.Count; j++)
                    {
                        VirtualMemberStatus status = memberStatus.Result[j];
                        text += String.Format("{5},{4},{0},{1},{2},{3}" + Environment.NewLine, status.Member.Address, status.Member.Port, status.EffectiveStatus, status.DesiredStatus, virtualKey.Key.Replace(":", ","), DateTime.UtcNow);
                        toolStripProgressBar1.PerformStep();
                    }
                }
                catch
                {
                    errors += String.Format("{0} Error Code: 2, Error occurred, check device name (case senstive) and admin group. This error may also occur due to connection loss, try again." + Environment.NewLine, DateTime.UtcNow);
                }
            }
            this.allResultsBox.Text = text;

        getallstatusButton.Enabled = true;
    }

    }

Проблема, с которой я сталкиваюсь, заключается в том, что, если virtuals равно нулю, инструмент вылетаетвместо этого я хочу сделать, если virtuals = null я хочу перейти к следующему пункту из списка.Я попробовал if statement, но он не работает так, как запланировано, но все равно возвращается в ноль.

Ответы [ 5 ]

8 голосов
/ 02 декабря 2011

Ну, это похоже на проблему для начала:

if (virtuals.Result == null)
{
    i++;
    getvirtuals.Location = deviceNames;

    for (int v = 0; v < virtuals.Result.Count; v++)

    ...

Если virtuals.Result равно нулю, как вы ожидаете, что virtuals.Result.Count будет работать?Я подозреваю, что вы имели в виду:

if (virtuals.Result != null)

Однако, я подозреваю, что вы действительно просто хотите:

// Keep going with the next iteration of the for loop
if (virtuals == null || virtuals.Results == null)
{
    continue;
}
2 голосов
/ 02 декабря 2011

Как насчет просто вставить:

  if(virtuals == null)
     continue;

сразу после строки

  var virtuals = client.GetKnownVirtuals(getvirtuals, LtmKeyType.VirtualAddressPort);
2 голосов
/ 02 декабря 2011

Если все, что вам нужно, это перейти к следующей итерации цикла, если virtuals равно нулю, тогда вы хотите if (virtuals == null) continue;

0 голосов
/ 02 декабря 2011

Вы пытались изменить строку:

    if (virtuals.Result == null)

до:

    if ((virtuals != null) && (virtuals.Result != null))

Если это не решит вашу проблему, то вам нужно указать, какие дополнительные ошибки.

0 голосов
/ 02 декабря 2011
if (virtuals.Result == null)

сделать это

if (virtuals == null)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...