C#是否與JavaScript的作業語法var x = y || z;
相當?如果你不知道,結果不是true/false
。如果定義了y
,則將其分配給x
,否則z
被分配給x
,即使它未定義。C#相當於JavaScript「OR作業」
注意,在JavaScript中的變量仍必須聲明:var test;
C#是否與JavaScript的作業語法var x = y || z;
相當?如果你不知道,結果不是true/false
。如果定義了y
,則將其分配給x
,否則z
被分配給x
,即使它未定義。C#相當於JavaScript「OR作業」
注意,在JavaScript中的變量仍必須聲明:var test;
在C#中有沒有這樣的概念作爲變量沒有被定義。這樣的操作符在C#中沒有意義。
我不確定你是如何定義定義的,但最接近Javascript的未定義狀態將是空或未分配。可能爲空。 – 2013-05-09 19:50:52
我當然知道它不是1對1的定義,但我們正在處理實用性,而null是分配給尚未實例化的對象的默認值,這與未定義的JavaScript相同。但是你是正確的。 – 2013-05-11 00:16:41
var abc = blah ?? "default";
沒錯
這是你在找什麼
var x = y ?? z;
不同的JavaScript,C#不是動態的,但靜態語言,使這樣的操作是不可能的 - 編譯錯誤將會發生。
想象一下你正在寫這if
:
if(pizzaPrice == hamburgerPrice)
之前先聲明變量:在編譯時會發生
decimal pizzaPrice;
decimal hamburgerPrice;
錯誤。
更新: 即使聲明變量也沒關係,因爲C#不支持這樣的功能。
在另一方面,JavaScript是通過調用ToBoolean
方法強制執行if
條件變量的評價,如果它undefined
或null
它等於到false
和C#不不包含這樣的行爲。
看看這個涼爽的文章:
但是,如果你想檢查一個變量被引用到null
您可以方便地使用null coalescing operator「??」運營商。
如下所示:
var x = y ?? z;
變量仍然需要聲明。我應該早一點提及。 – 2013-05-09 20:02:00
@ArlenBeiler請在答案中閱讀我的更新。通常情況下,JavaScript在'if'條件下將'null'或'undefined'變量評估爲'false'! – 2013-05-09 20:23:33
是的,有:??
string x = y ?? z;
這基本上計算:
string x = y != null ? y : z
不過,也有Javascript和C#之間的一些區別。和JS一樣,y
和z
都必須事先聲明。但是,與JS不同,還必須在C#中「分配」y
和z
,否則將像往常一樣拋出編譯器錯誤。
該運算符需要一個可爲空的類型,並在返回第二個之前檢查第一個是否爲null。如果你願意,你可以連鎖一大堆(a ?? b ?? c ?? d ?? e
)。
請注意,零長度字符串是而不是 null。
「如果定義了y,則它被分配給x」。不完全的。如果'y'可以被當作一個假值(0,false,null),那麼它是否被定義並不重要; x將被分配給z所保存的值。 - http://jsfiddle.net/8cMzK/ – 2013-05-09 19:53:00
@TimMedora啊非靜態類型語言的魔力。 – Servy 2013-05-09 19:55:51
這就是爲什麼把它與c#中的空合併等同起來感覺很危險......有時它們的行爲相似,但實際上它們有很大不同,部分原因是由於語言的根本差異。 – 2013-05-09 19:57:22