2012-12-04 107 views
-2

一個簡單的問題:C#?運算符的語法

有沒有在C#中這種操作的語法:

  • 如果狀態,返回對象本身:默認值

就像下面的例子,但我不想評價myObject的兩倍(這也能像數據庫查詢的一些更復雜的東西):

int myVar = (myObject == DBNull.Value ? 0 : (int)myObject); 

我知道有這樣的語法檢查空(如下面的例子),但是有檢查任何不同的值,如DBNull.Value在這種情況下?

int myVar = Convert.ToInt32(myObject ?? 0); 

回答

1

號:

int myVar = myObject == DBNull.Value ? 0 : (int)myObject; 

是你能做的最好的。它不會因爲它被提及兩次而對對象進行兩次評估。

或者在課程的功能將它包裝:

int myVar = DBObjectToInt(myObject); 

public static int DBObjectToInt(object dbObj) 
{ 
    return dbObj == DBNull.Value ? 0 : (int)dbObj; 
} 

另一個選擇是在SQL中使用Coalesce,所以你甚至不擺在首位獲得的DBNull。

+0

所以你說這不走這裏是db-query的兩倍:int i =(dt.Compute(「MAX(Column)」,string.Empty)== DBNull.Value?0:dt.Compute(「MAX(Column)」,string.Empty)) ; – Jaska

+0

我知道我可以將它存儲在一個臨時變量中,但我希望我可以在一行代碼中完成所有這些操作:) – Jaska

+0

是的,但我認爲'myObject'是一個變量的名稱。所以你應該已經完成​​了'var myObject = dt.Compute(「MAX(Column)」,string.Empty);' – weston

1

您不必兩次評估的對象。評估該對象,將其存儲在一個變量中,並對結果變量進行檢查。

你的問題的答案是否定的,你不能在C#中隨心所欲地創建你自己的迷你語言。最常見的操作有捷徑,但自定義三元一元運算符不是一個。

+0

我知道我可以將其存儲在一個臨時變量,但我希望我能做到這一切的代碼:) – Jaska

+0

使用Perl一行....... –