Присвойте ненулевое значение в логическом значении, только если оно не равно нулю - PullRequest
0 голосов
/ 26 июня 2018

У меня есть объект, который имеет логическое поле с именем NameIndicator (внешний контракт один).В моем коде я сделал мой логический «IsIndicated» как обнуляемый.

Как проверить наличие нулевого значения и присвоить значение только в том случае, если оно не равно нулю?

В настоящее время я получаю ошибку времени компиляции с приведенным ниже кодом, так как это очевидно, что оно может быть обнуляемым для поля, не допускающего нулевого значения

 personDetails.Name= new Name_Format()
                    {
                        NameSpecified = true,
                        NameIndicator = contract.IsIndicated
                    };

1 Ответ

0 голосов
/ 26 июня 2018

Если вы хотите присвоить конкретное значение в случае нулевого значения, а в противном случае значение, вы используете оператор объединения нулей .

personDetails.Name= new Name_Format()
{
  NameSpecified = true,
  NameIndicator = contract.IsIndicated ?? true
};

, который имеет ту же семантику, что и

personDetails.Name = new Name_Format()
{
  NameSpecified = true,
  NameIndicator = contract.IsIndicated == null ? true : contract.IsIndicated.Value
};

за исключением того, что, конечно, он вызывает IsIndicated только один раз.

Если вы хотите, чтобы среда выполнения выбрала для вас значение по умолчанию, тогда вы можете сделать

personDetails.Name = new Name_Format()
{
  NameSpecified = true,
  NameIndicator = contract.IsIndicated.GetValueOrDefault()
};

В этом случае он выберет «ложь», так как это значение по умолчанию для логических значений.

Если вы не хотите, чтобы вообще ничего не происходило, если значение равно нулю, вы можете использовать оператор if:

if (contract.IsIndicated != null)
{
  personDetails.Name = new Name_Format()
  {
    NameSpecified = true,
    NameIndicator = contract.IsIndicated.Value
  }
};
...