請謹慎使用 C# 裡的 var

我們都知道,比如 Swift 、 Python 裡,都不需要特別的去聲明一個變量的類型——它們雖然是類型安全的語言,卻可以動態地在上下文中幫你推斷變量的類型。

Python 不用你做什麼,寫一個名字就是默認聲明了一個變量;而 Swift,則更接近我們的題目,它也使用了

如果你有過 Swift 的使用經驗,再來使用 C# 的時候,就會發現這個 ,不再是那個

在 C# 裡,你不能隨隨便便地使用 var,你只能在方法裡使用它。

說起 ,其實名稱倒是一樣的,都是 變量,都是變量的意思。之所以使用這個詞,意思就是讓你在大部分情況下不必再寫出複雜的類型聲明,只需要專注你的內容就好了,剩下的交給類型推斷去完成。

不過在 C# 中,它對於這一點的支持比較保守。你不能像 Swift 一樣,也不能像 Python 一樣到處使用類型推斷——C# 只允許你在局部變量上使用類型推斷;也就是說,你只能在具體的方法裡使用 ,而對於類型屬性的聲明?還得老語法。

C# 的類型推斷沒你想像的那麼聰明

在 MSDN 裡,關於 介紹頁面很簡單,只有幾個簡單的栗子——當然,在這些簡單的情況下C#的類型推斷運行良好。

但如果我要從 列表顯示 裡獲取一個 項目 ,那麼很遺憾,你將得到的不是 的ListViewItem 實例,而很有可能是一個 目的

之所以講這個例子,是因為它困擾了我好久,最終才發現原來是 C# 的類型推斷惹的禍。

類型推斷讓代碼意義含糊不清?

另外,對於這個自 2008 年以來的功能,似乎使用的人不多,爭論卻不少,比如: C#爭論:什麼時候應該使用var?

我接觸 C# 時間不長,但在var上踩的坑卻不少。但用過 Python 和 Swift ,我絲毫不覺得類型推斷會讓代碼的意義含糊不清,閱讀起來也不會痛苦——相反,它讓我寫代碼的時候更能夠專注於內容——即“聲明——使用“,而不是先去想想類型是什麼。當我想到內容的時候,編譯器就已經為我推薦了類型——大部分情況下都是合適的。

而 C# 呢?它僅僅保守地把類型推斷用在了局部變量上——也感謝如此吧,不然這就應該算是災難了。 C# 的類型推斷總能恰到好處地避開我最想要的類型。所以我覺得,在 C# 裡使用類型推斷,不會讓代碼的意義含糊不清,而是讓你根本不知道自己的變量類型被聲明為什麼……

——你根本不知道什麼時候你的變量類型就被聲明成了 目的 ,還沾沾自喜地使用了 的ToString() 方法。

 

本文由 落格博客 原創撰寫:落格博客 » 請謹慎使用 C# 裡的 var

轉載請保留出處和原文鏈接:https://www.logcg.com/archives/1722.html

關於作者

R0uter

如非聲明,本人所著文章均為原創手打,轉載請註明本頁面鏈接和我的名字。

註釋

發表評論

您的電子郵件地址不會被公開. 必填字段標 *