2014-01-10 52 views
4

我在c#中有一些代碼,如果某個布爾值爲true,需要將數字加1,但否則需要說明。我發現在VS 2012中使用「立即」窗口的唯一方法是+ Convert.ToInt32(boolean)是Convert.toInt32(布爾)在C#中唯一的方法來做到這一點?

我在這裏丟失了一些明顯的東西嗎?我認爲,由於布爾值基本爲真(1)或假(0)(讓我們忘記FileNotFound),將布爾轉換爲Int值會更容易。

編輯: 假爲0,而不是1

EDIT2:我原來的編輯得到了吞沒。我目前正在對數字進行空檢查(數字是來自Dynamics CRM 2011實體的可空int字段)。是否可以保持nullcheck?

+1

不要錯誤地假設什麼是整數表示形式爲true。只是假可以被假定爲零。 – Steve

回答

6

我不認爲向某些值添加布爾標誌是非常可讀的解決方案。基本上你想要增加(即加1)的值,如果標誌是true。因此,簡單的,如果檢查將清楚地描述你的意圖,加做的工作:

if (flag) value++; 

更新:根據您的編輯,你想要做的兩件事情:

  1. 設置默認值,您可爲空值
  2. 如果某些條件爲真,則遞增值。

爲了清楚你的代碼,我不會試圖把這兩個東西放在一行。讓你的意圖明確:

value = value ?? 0; // 1 

if (flag) // 2 
    value++; 
+0

我正在做一個nullcheck,我可以用上面的方法做。有沒有辦法保持這個oneliner,同時保持價值的空檢查? – Nzall

+0

@NateKerkhofs「價值」是一個可爲空的數字? –

+0

是的。 value是來自Dynamics CRM 2011實體的可空int字段。 – Nzall

3

簡單的解決辦法是,像這樣:

val += flag ? 1 : 0; 

事實是,一個.NET布爾是簡單地從整一個完全不同類型的(不像,說,C++,它是一個「更名爲」整)。事實上,它實際上是用一個整數值來實現的,它是實現細節,不能被依賴。事實上,當你篡改布爾值的實際值時(例如,使用直接內存操作或重疊結構字段),你可以做很多奇怪的事情 - 一致性會消失。

因此,不要使用「布爾值的實際值」。簡單地期望兩個可能的值,即truefalse,並與那些一起工作。

+0

我目前正在做的是Object.Variable =(object.variable ?? 0)+ Convert.ToInt32(boolean);有沒有辦法在這裏添加nullcheck? – Nzall

+0

當然,只需使用Object.Variable =(Object.Variable ?? 0)+(boolean?1:0);' – Luaan

+0

('a + = b'只是'a = a + b'的快捷鍵) – Luaan

0

,您仍然可以使用null -check並根據布爾添加值,就像這樣:

obj.Variable = (obj.Variable ?? 0) + (yourBoolean ? 1 : 0); 
//obj is the instance of your object 
//Variable is the nullable integer 
//yourBoolean is the bool to check against 
0

Object.variable爲int變量或可空?如果IntVarable它的默認值是0,並且您可以像這樣寫:Object.variable+=bool?1:0,否則可以使用它:Object.variable=Object.variable??0+bool?1:0

相關問題