2013-07-19 27 views
0

因此,我爲我的一位同事創建了一個連接庫,以節省他在當前項目上的時間。我的同事將在他的c#應用程序中使用這個庫來連接到一個rest api。在庫中,我爲每個請求創建了處理程序(GET/POST/PUT/DEL)。當他的申請與我的圖書館談話時,我將返回如下回復:在c#中使用var真的很糟糕?

return client.PostAsync(url, content).Result; 

這將從其餘api返回一個動態對象。

今天,他使用我的圖書館,由於某種原因無法與他的應用程序結合使用。我告訴他使用VAR和它的工作是這樣的:

var x = API.CreateTraject(parameter1,parameter2); 

他拒絕使用var和最終花約40分鐘搞清楚如何得到它沒有它的工作。然後他指責我返回一個動態對象,並且他將永遠不會使用var,因爲他明確地告訴我更好。

我正常工作作爲移動開發者(IOS/Android),我一直在使用var。

現在我的問題是:

使用var真的太糟糕了嗎?我是否應該將庫中的響應轉換爲可以在他的應用程序中明確輸入的響應?在我看來,我寧願使用var並節省一些時間,然後花40分鐘嘗試去明確。

+0

我剛剛刪除的評論指出*正是*爲什麼這種類型的問題在這裏沒有公開。你在下面得到了很好的信息閱讀它,檢查互聯網,或獲得一本書。 –

回答

12

使用var真的太糟糕了嗎?我是否應該將庫中的響應轉換爲可以在他的應用程序中明確輸入的響應?在我看來,我寧願使用var並節省一些時間,然後花40分鐘嘗試去明確。

var,在C#中,僅僅是一個編譯器「詭計」。沒有涉及動態類型,並且編譯的代碼完全相同。當您將鼠標懸停在變量上時,IDE會告訴您使用的「真實」類型。

無論他使用var還是實際的返回類型都無關緊要,無論您是如何創建庫。

如果您的圖書館正在返回dynamic不必要,這可能是一個不同的問題,並且一個用戶可能有有效的投訴。不像var(這只是一個編譯時間的詭計),dynamic確實會顯着改變行爲。

或者,如果您要從庫中返回匿名類型,則可能需要考慮爲您的值創建實際的類。匿名類型實際上只是在本地範圍內使用,不應該成爲任何公共API的一部分。

+0

謝謝,其餘的API由我們正在合作的另一家軟件公司提供。我覺得要回復其餘API的響應是如何應該的,如果它通過使用var爲什麼不工作。 –

+0

@FlorianSchaal如果它是一個真正的動態對象,那麼讓他使用動態的,而不是var ... –

+0

好吧,但不會使var類型的強類型在未來的代碼中使用?比如說動態是一個json容器,他需要從中提取數據。 –

2

使用var沒有什麼不合法,它只是讓編譯器找出對象應該是什麼數據類型。

唯一的危險是你,程序員,直到你將鼠標懸停後才知道它是什麼。這可能會導致問題,你認爲這是一回事,但事實證明是另一回事。

1

這不是不好使用使用implicit typing,這只是一個風格問題。我個人使用它很簡單,因爲它使我所有的變量聲明佔用相同的空間量,而不管類型如何。

但是,使用dynamic肯定會很糟糕,特別是在過度使用時。這意味着可以在編譯時執行的類型安全檢查需要推遲到運行時間。有時候這很有用,但它可能會對性能產生影響。除非你真的需要返回一個動態,我強烈建議從你的API方法返回一個特定的類型。

對於他可能只需要使用這個它的價值,如果你的同事是如此反對隱式類型:

dynamic x = API.CreateTraject(parameter1,parameter2); 
1

var無關與dynamicvar約爲type inference

您的方法不應該返回dynamic開始。無論如何,創建Generic Methods並讓消費者(您的同事)決定該方法將返回的對象類型。

3

可以使用var,它不是非法或任何東西。

但我想如果你知道變量的類型,用類型聲明變量。這將使您的代碼更易於閱讀。

相關問題