2008-11-21 65 views
0

我需要一個集合使用什麼數據類型?

  • 包含鏈接到一個對象的集合。
  • 這些對的序列應該由我任意設置(基於從數據庫中獲得的int),並且在整個生命週期中保持靜態。
  • 條目數量很小(0〜20),但不同。
  • 該集合應該是可測試的。
  • 我不必搜索任何東西的集合。
  • 該集合在初始化後會被更改。
  • 我想使用現有的數據類型(沒有新的類),因爲它將用於我的asp.net mvc控制器,視圖和服務,我不希望它們都只依賴於庫這個愚蠢的持有人類。

我想

IDictionary<int, KeyvaluePair<TheType, double>> 

會做的伎倆,但我不能設置雙初始化後。

- 編輯 -
我發現,通過LINQ的2 SQL的Visual Studio啄生成的類實際上是局部類,因此您可以在其中加入任何你想要的。我通過向分部類添加一個雙字段來解決我的問題。
非常感謝您提出的答案。

+0

你說的 「掛」 的雙重意思? – 2008-11-21 11:08:39

+0

double是根據對象的字段計算的。由於我不能將方法或字段添加到對象本身,我想這樣做。 – 2008-11-21 11:12:51

+0

在我看來,你可能想要子類化(擴展)該對象?會有更多的OO,模式名稱將是代理或裝飾。 – Loki 2008-11-21 11:32:21

回答

2

這聽起來像你可能只想要一個相當於KeyValuePair,但可變。既然你只使用它作爲一對值,而不是一個鍵值對,你可能只是做:

public class MutablePair<TFirst, TSecond> 
{ 
    public TFirst First { get; set; } 
    public TSecond Second { get; set; } 

    public MutablePair() 
    { 
    } 

    public MutablePair(TFirst first, TSecond second) 
    { 
     First = first; 
     Second = second; 
    } 
} 

這不重寫GetHashCode還是equals,因爲你沒有實際使用這些(因爲它處於價值位置)。

0

好,KeyValuePair是不變的(這是一件好事),所以你必須更換KeyValuePair的全部價值,而不只是它的一部分:

yourDict[10] = new KeyValuePair<TheType, Double>(yourDict[10].Key, newValue); 

...或者認爲像Jon Skeet。嘎。 :)

1
struct MyPair 
{ 
    public object TheType; 
    public double Value; 
} 

MyPair[] MyColleccyion = new MyPair[20]; 
0

這個怎麼樣

public class ListThing<TKey, TValue> : Dictionary<TKey, TValue> 
{ 
    public double DoubleThing { get; set; } 

    public ListThing(double value) 
    { 
     DoubleThing = value; 
    } 
}