2013-05-09 35 views
1

C#是否與JavaScript的作業語法var x = y || z;相當?如果你不知道,結果不是true/false。如果定義了y,則將其分配給x,否則z被分配給x,即使它未定義。C#相當於JavaScript「OR作業」

注意,在JavaScript中的變量仍必須聲明:var test;

+1

「如果定義了y,則它被分配給x」。不完全的。如果'y'可以被當作一個假值(0,false,null),那麼它是否被定義並不重要; x將被分配給z所保存的值。 - http://jsfiddle.net/8cMzK/ – 2013-05-09 19:53:00

+0

@TimMedora啊非靜態類型語言的魔力。 – Servy 2013-05-09 19:55:51

+0

這就是爲什麼把它與c#中的空合併等同起來感覺很危險......有時它們的行爲相似,但實際上它們有很大不同,部分原因是由於語言的根本差異。 – 2013-05-09 19:57:22

回答

5

我認爲您在尋找??運營商。

MSDN Reference

+2

儘管這對大多數情況都有效,但它只能用於空數據。 – Nomad101 2013-05-09 19:46:31

1

在C#中有沒有這樣的概念作爲變量沒有被定義。這樣的操作符在C#中沒有意義。

+1

我不確定你是如何定義定義的,但最接近Javascript的未定義狀態將是空或未分配。可能爲空。 – 2013-05-09 19:50:52

+0

我當然知道它不是1對1的定義,但我們正在處理實用性,而null是分配給尚未實例化的對象的默認值,這與未定義的JavaScript相同。但是你是正確的。 – 2013-05-11 00:16:41

3
var abc = blah ?? "default"; 

沒錯

3

這是你在找什麼

var x = y ?? z; 
1

不同的JavaScript,C#不是動態的,但靜態語言,使這樣的操作是不可能的 - 編譯錯誤將會發生。

想象一下你正在寫這if

if(pizzaPrice == hamburgerPrice) 

之前先聲明變量:在編譯時會發生

decimal pizzaPrice; 
decimal hamburgerPrice; 

錯誤。

更新: 即使聲明變量也沒關係,因爲C#不支持這樣的功能。

在另一方面,JavaScript是通過調用ToBoolean方法強制執行if條件變量的評價,如果它undefinednull等於false和C#不不包含這樣的行爲。

看看這個涼爽的文章:

但是,如果你想檢查一個變量被引用到null您可以方便地使用null coalescing operator「??」運營商。

如下所示:

var x = y ?? z; 
+0

變量仍然需要聲明。我應該早一點提及。 – 2013-05-09 20:02:00

+0

@ArlenBeiler請在答案中閱讀我的更新。通常情況下,JavaScript在'if'條件下將'null'或'undefined'變量評估爲'false'! – 2013-05-09 20:23:33

0

是的,有:??

string x = y ?? z; 

這基本上計算:

string x = y != null ? y : z 

不過,也有Javascript和C#之間的一些區別。和JS一樣,yz都必須事先聲明。但是,與JS不同,還必須在C#中「分配」yz,否則將像往常一樣拋出編譯器錯誤。

該運算符需要一個可爲空的類型,並在返回第二個之前檢查第一個是否爲null。如果你願意,你可以連鎖一大堆(a ?? b ?? c ?? d ?? e)。

請注意,零長度字符串是而不是 null。