2008-11-21 62 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; 
    } 
}