2012-11-22 19 views
1

我最近的代碼是包含很多boxing and unboxing,因爲我的許多變量都是在運行時解決的。 但我讀過拳擊和取消裝箱在計算上非常昂貴,所以我想問問是否有任何其他方法來裝箱/取消箱類型? 這是一個很好的使用方法嗎?C#拳擊/取消裝箱的任何替代品?

+4

你有性能問題嗎?你有沒有嘗試分析你的應用程序,看看它是否有任何瓶頸?先擔心已知的瓶頸,然後再擔心可能不成問題的事情。 – Polyfun

+1

#ShellShock 我不認爲性能是我程序中的問題,但我認爲這是一個相當有趣的問題,這也可能對其他用戶也有幫助。 – Janman

回答

7

使用Generics ....

更多信息here


例如

List lst=new List();//non generic List accepts any kind of object 
lst.Add(44);//this causes unnecessary boxing from int to object 
lst.Add(100);//this causes unnecessary boxing from int to object 

如果您確信該列表將始終包含您可以使用泛型的整數。 。

List<int> lst=new List<int>(); 
lst.Add(44);//no boxing or unboxing 
lst.Add(100);//no boxing or unboxing 
+1

同意,泛型是要走的路 –

+0

嗨,謝謝你的答案。 但是,問題是我不知道我的函數將返回什麼樣的類型(在我的代碼中,它是int或字符串),因此我不知道我的列表將包含什麼。 – Janman

+0

@Janman好比泛型不會是一個正確的選擇,然後 – Anirudha

-1

在那個具體的問題中,我可以說使用更一般的類型,在這種情況下,字符串和解析它的數字,如果它的數字。更普遍的做法是創建自定義結構或使用元組來表示對於每種情況的真實答案,但它的退出難看。

+0

作爲一個字符串處理int並解析它不是一個好的解決方案。您失去了強大的打字優勢並將潛在的錯誤從設計/編譯時間移至運行時間。這是不可取的。此外,如果解析一個字符串的計算量比拳擊/拆箱的計算量要貴,雖然我沒有統計數據支持,但我會感到非常驚訝。 (抱歉對新用戶不利) – Basic