2015-03-23 3 views
2

Есть ли способ переключить состояние булевой переменной в C#?Есть ли способ переключить логическую переменную в C#?

Я понимаю, что это простое решение:

bool locked = false; 

if (locked == false) 
{ 
    locked = true; 
} 
else 
{ 
    locked = false; 
} 

Но это может быть сделано в одной строке в чем-то вроде этого:

bool locked = false 

locked = locked.toggle(); 
+0

FYI - Вы можете использовать логические значения в 'if()' statments напрямую. Подобно 'if (locked) {...}' или 'if (! Locked && count> 0) {...}'. – ja72

ответ

11

Да. Используйте следующее:

locked = !locked; 
+0

Ничего себе, это было легко. Может ли этот синтаксис применяться к любым другим типам переменных? –

+0

Оператор '!' Может быть перегружен другими типами, но он редко встречается, потому что он нередко делает интуитивный смысл логически инвертировать многие типы таким образом, который не лучше представлен с явно названным методом. –

2

Вы пробовали следующие

locked = !locked; 
4

Вы можете определить метод расширения, как это:

public static class Helpers 
{ 
    public static bool Toggle(this bool value) 
    { 
     return !value; 
    } 
} 

Так что вы можете написать что-то более осмысленным как locked = locked.Toggle()

Надеюсь, это поможет

+1

«Более значимый», если вы не знаете синтаксис языка. Мне это кажется ненужной сложностью. – yoyo

+2

Конечно, но только потому, что вы _can_ определяете метод расширения, это не значит, что вы _should_. Программист C# должен знать, что логическое «!» оператор делает. – yoyo

+0

Я полностью согласен, я просто хотел дать альтернативный ответ. – chomba

Смежные вопросы