2010-03-17 2 views
12

У меня есть nullable bool. Что такое быстрый способ его инвертировать. В других словах, если значение TRUE делает его ЛОЖНЫМ, в противном случае сделайте его ИСТИННЫМ.C#, быстрый способ инвертировать nullable bool?

Для уточнения (с комментариями):

Ожидаемое поведение: если обнуляемым BOOL имеет значение, а затем инвертировать, в противном случае должен возвращать нуль.

+5

Что вы считаете обратным нулевым? –

+1

@Allen, мое ожидаемое поведение есть, если значение nullable bool имеет значение, затем инвертирует, в противном случае должно возвращать значение null ... –

+5

Вы понимаете это. ! myBool даст вам поведение, которое вы хотите. – DRBlaise

ответ

27

myBool = !myBool;

Edit: ОК, на основе рафинированного понимания вопроса (то есть myBool говорит пустое значение, если оно было нулевым), выше, является простой ответ.

+0

Спасибо adam, будет ли эта работа работать с типами NULL? –

+3

Черт, избили «сообщение слишком короткое». – ChrisF

+0

@JL: он будет работать с нулевыми булевыми значениями, если значение не равно нулю. В этом случае вам сначала нужно проверить myBool.HasValue. –

19

Edit, drblaise прав, ! работает просто отлично

bool? a = null; 
bool? b = false; 
bool? c = true; 

a = !a; 
b = !b; 
c = !c; 

Assert.AreEqual(a, null); 
Assert.AreEqual(b, true); 
Assert.AreEqual(c, false); 

здесь таблица истинности, я знаю, что это скучная, но я хотел бы видеть, как SO обрабатываемую "таблицу"

value  !value 
|---------|-----------| 
| null | null | 
|---------|-----------| 
| false | true | 
|---------|-----------| 
| true | false | 
|---------|-----------| 
+1

+1, аналогично вы могли бы иметь^= true, но это, вероятно, слишком неясно –

2

x =! (x ?? false)

+0

почему бы просто не x =! X? –