2016-02-11 59 views
1

我不確定是否有辦法做到這一點,但我認爲這是最好的問題。在等式的RHS中使用值後更改布爾值?

我想在使用它之後立即更改布爾值(或之前,只需要語義更改),但在同一行中。 預期的效果是相同的,因爲這代碼:

bool flag, tempFlag; //whatever names 
... 

tempFlag = flag; 
flag = !flag; 

但我不知道是否有這樣做的速記方式,在一行。喜歡的東西tempFlag = flag!;:P

例如,你可以在一個行中使用它的值後立即更改int的值,如:

int x = y++; 

有沒有寫這樣的一個短的路行動?

我的具體問題是在C#中,但我很好奇,如果任何其他流行語言有這樣的方式。

+6

爲什麼寫一行其他人可能不明白的語法,當你可以寫出兩個人,每個人都知道你在做什麼? – NathanOliver

+0

@NathanOliver感謝您的意見。是的,在大多數情況下我都同意你的看法。但是,這只是我正在努力並試圖保持不變的個人實驗項目。的行數減少到最低限度,所以我不覺得需要讓代碼難以置信地可讀(只要我得到上下文,我知道我會理解它)。 – andeart

+1

你現在說,但是當你回到它並且你忘記了它的三年時間裏呢。那麼你會想知道你在做什麼。我可以欣賞試圖保持行數減少,但你不應該犧牲它的可讀性恕我直言。 – NathanOliver

回答

4
tempFlag = !(flag = !flag); 

應該能夠在所有提及的語言中工作。 flag = !flag返回新的值,然後再次反轉並放入tempflag。但正如NathanOliver所說,我認爲沒有必要這樣做。如果你想讓它成爲線程安全的(這是我能想象得到的唯一應用程序,而且我甚至不確定它是否可行)使用線程鎖來實現它。

+0

非常有創意(和晦澀)。 –