C #: передача обнуляемой переменной в метод, который принимает только ненулевые переменные - PullRequest
6 голосов
/ 10 ноября 2009

У меня есть код, похожий на этот:

public xyz (int? a)
{
  if (a.HasValue)
  { 
    // here DoSomething has parameters like DoSomething(int x)
    blah = DoSomething(a);

Я получаю сообщение об ошибке (не могу преобразовать из int? В int). Есть ли способ, которым я могу передать переменную «а» в моей функции без необходимости делать DoSomething(int? x)?

Ответы [ 2 ]

16 голосов
/ 10 ноября 2009

Используйте свойство Value переменной NULL:

public xyz (int? a) {
  if (a.HasValue) { 
    blah = DoSomething(a.Value);
    ...

Метод GetValueOrDefault также может быть полезен в некоторых ситуациях:

x = a.GetValueOrDefault(42);  // returns 42 for null

или

y = a.GetValueOrDefault(); // returns 0 for null
6 голосов
/ 10 ноября 2009

Вы можете привести int? к int или использовать a.Value:

if (a.HasValue)
{ 
  blah = DoSomething((int)a);

  // or without a cast as others noted:
  blah = DoSomething(a.Value);
}

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

// using coalesce
blah = DoSomething(a?? 0 /* default value */);

// or using ternary
blah = DoSomething(a.HasValue? a.Value : 0 /* default value */);

// or (thanks @Guffa)
blah = DoSomething(a.GetValueOrDefault(/* optional default val */));
...