[C#]+operator的有趣概念

The binary + operator performs string concatenation when one or both operands are of type string. If an operand of string concatenation is null, an empty string is substituted. Otherwise, any non-string argument is converted to its string representation by invoking the virtual ToString method inherited from type object. If ToString returns null, an empty string is substituted.

前兩天在部門上課的時候,member提到一個不算太新奇的東西,但卻引發了我的興趣,我們先看看以下的範例,在javascript中我們會這樣寫:

1 alert(1+1);

回傳的結果很簡單,就是2,但今天如果我這樣寫:

1 alert(1+'1');

現場有人的回答是2,也有人回答11,這個問題的答案是11,至於為什麼等一下再說,接下來這個例子呢,會回傳多少:

1 alert(1+'1'+1);

 

 

有人回答12,也有人回答111,這個問題的答案是111,javascript原則上是無型態,若程式中沒有特別去檢查變數的型態,在執行時是不會出現"某某變數不是int或string"一類的錯誤的,所以當兩個看似不同型態的變數相加時,若其中有一個變數是以字串形式出現(EX:'1'),javascript預設就會以字串串接的模式來處理這個表示式,所以1+'1'結果會與'1'+'1'相同,而1+'1'+1結果也會與'1'+'1'+'1'相同了。

到這邊好像還沒有講到我感興趣的部分,我工作的內容主要是撰寫ASP.NET的產品,所用的開發語言是C#與javascript居多,既然javascript有這樣的特性,那我倒也想知道C#是不是也一樣,我趕緊寫了個C#的小範例來試看看,

1 Response.Write(1+"1");

執行的結果畫面印出11,看起來似乎一樣,我再多try一下,

1 Response.Write(1+"1"+1);

執行的結果畫面印出111,跟javascript得到的結果一模一樣呢,上MSDN查了一下,看到這一篇:http://msdn.microsoft.com/zh-tw/library/aa691375(en-us,VS.71).aspx

裡頭有一段提到:The binary + operator performs string concatenation when one or both operands are of type string. If an operand of string concatenation is null, an empty string is substituted. Otherwise, any non-string argument is converted to its string representation by invoking the virtual ToString method inherited from type object. If ToString returns null, an empty string is substituted.

 為了驗證他說的,我又寫了一個小範例:

1 Response.Write(1+"1"+null);

這時畫面真的印出11,代表他所說的內容是正確的,當出現null時,會以空字串做替代,這也算是個有趣的小發現吧。

游舒帆 (gipi)

探索原力Co-founder,曾任TutorABC協理與鼎新電腦總監,並曾獲選兩屆微軟最有價值專家 ( MVP ),離開職場後創辦探索原力,致力於協助青少年培養面對未來的能力。認為教育與組織育才其實息息相關,都是在為未來儲備能量,2018年起成立為期一年的專題課程《職涯躍升的關鍵24堂課》,為培養台灣未來的領袖而努力。