Как упростить использование обнуляемых логических значений в C # - PullRequest
0 голосов
/ 25 июня 2011

Вот пример кода, с которого можно начать:

class Foo
{
   public bool? IsValid { get; set; }
}

// later in some other function...
void DoStuff( Foo myFoo )
{
   myControlState.Visible = myFoo.IsValid.HasValue ? myFoo.IsValid.Value : false;
}

Я сталкиваюсь с множеством ситуаций, когда мне приходится использовать троичный оператор, как описано выше, чтобы правильно использовать обнуляемый тип bool.Было бы неплохо, если бы был немного более простой способ получить значение bool без исключения.Приведенный выше код кажется простым, но в гораздо более сложных ситуациях получается много кода.Я надеялся на что-то простое, например:

myControlState.Visible = GetNullableValue<bool>( myFoo );

У кого-нибудь есть более чистые альтернативы троичному оператору?

Ответы [ 4 ]

7 голосов
/ 25 июня 2011

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

myControlState.Visible = myFoo.IsValid ?? false;
1 голос
/ 25 июня 2011
myControlState.Visible = myFoo.IsValid.GetValueOrDefault();
1 голос
/ 25 июня 2011

Это более элегантно

 myControlState.Visible = myFoo.IsValid ?? false;
0 голосов
/ 25 июня 2011

Если вы читаете битовые значения с сервера SQL и хотите проверить на наличие нулевых ошибок, используйте следующий метод Расширения для строки данных

public static T GetValueOrDefault<T>(this DataRow row, string key)
{
    return row.GetValueOrDefault(key, default(T));
}

, а когда вы читаете данные с сервера SQL, введитедюймы

 Boolean IsVisible = GetValueOrDefault<string>("FieldName");
...