2012-05-12 29 views
-2

我需要在列表或數組中存儲多個值片刻。這些值是多種類型的像字符串,整數,日期時間等等多種不同類型的值列表/數組

我有兩種選擇:

選項1:

宣告以類型的對象是這樣的陣列:

object[] values; 

選項2:

申報陣列,用於接口和實現對每種類型保持自己的類。

interface IType 
{ 
} 

IType[] values; 

class StringValue : IType 
{ 
    public string StringValue { get; set; } // not declared in interface! 
} 

class IntValue : IType 
{ 
    public int IntValue { get; set; } // not declared in interface! 
} 

問:

有什麼性能優勢和/或影響每個實現選項?據我所知(或quessing),boxinq有使用object[]時自己的性能影響。

什麼備選方案二?至少使用StringValueIntValue屬性需要更多的代碼,第一類必須確定,IType必須澆鑄的StringValue或INTVALUE等等

有這麼大的影響,使用object[]的表現,我真的應該考慮一下像選項2?

+3

在擔心性能之前,只需實現並編寫代碼和TEST TEST TEST,然後查看性能是否成問題,然後可以根據需要優化** ** –

+0

當然!我已經實現了選項1,因爲我知道(沒有計量!)會有一些問題,我只是想如何讓我的代碼更好。也許問題更多的是要問什麼可能比選項1更好.... – Harza

+0

要求「更好」不會有幫助 - 你需要澄清更好的意義。 – Oded

回答

1

IntValue你基本上是建議箱的整數類...它封裝了它的目的是,它可以參與對象[]。我預計在這種情況下,性能的改進,根據你的實現,它可能比編譯器實現的裝箱更差。

話雖如此,我與你們的努力可能是更好的專注提高你的代碼的其他領域的評議同意。有很少的情況下,拳擊開銷將是最重要的關注領域。

我沒有遇到一個場景拳擊將影響到用戶體驗(與許多數字,可能是int,float或雙工作)。我解決了那個using expression trees

+0

該接口模型的一個優點是你確保數組只能有'ints','''''','datetimes'或其他實現接口的類(如果它是內部的,將會是一個已知的有限數量)。如果你使用'object',它確實可以是任何東西。 – Servy

+0

是的,但是接下來,界面每個類型都有一個成員。它在一般意義上並不是一個真正的接口(一個到多個實現的接口)。人們也可以從共同的基礎類型中獲得這種好處。 –

+0

感謝您的回答。我也發現這個http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/808ad927-385f-49c9-aace-256eefe659d7 – Harza

0

我不覺得有什麼太大的性能影響。如果使用object [] _objects,那麼用於查找對象類型的反射可能會稍慢一點。 .GetType()函數。