2013-11-01 21 views
6

我需要一个包含一对值的结构,其中一个值将被改变。所以我的第一个想法是使用KeyValueItem或Tupple <>,但后来我看到他们只有一个getter。我不明白为什么?你会在我的情况下使用什么?我可以创建自己的课程,但有没有其他方法?为什么Tuple或KeyValueItem没有setter?

+0

字典 ?? – Ric

+1

关于元组:http://stackoverflow.com/questions/7787994/is-there-a-version-of-the-class-tuple-whose-items-properties-are-not-readonly-an – dcastro

+2

至于'KeyValuePair ',因为它是一个结构体,它应该是不可变的(阅读http://blogs.msdn.com/b/ericlippert/archive/2008/05/14/mutating-readonly-structs.aspx)。 – dcastro

回答

2

您可以创建自己的实现:

public class Pair<T, U> { 
    public Pair() { 
    } 

    public Pair(T first, U second) { 
     this.First = first; 
     this.Second = second; 
    } 

    public T First { get; set; } 
    public U Second { get; set; } 
}; 
+2

*我可以创建自己的类,但有没有其他方法? * –

+0

@DavidHeffernan我真的明白,作为创建一个非泛型类的OP。我认为这是一个有效的建议。 –

0

元组仅在C#中被读取。这在答案here中有解释,主要是由于它们的功能编程本质。

您应该创建自己的MutableTuple实现,该实现允许修改。

需要考虑的事情:

  • 您可能希望覆盖EqualsGetHashCode
  • 你可能希望它是元组(IComparable)的First元素排序。
+0

好吧,我明白了原因,但我认为他们也可以提供一些可变的东西。实现它不是问题,我只是想知道已经存在的东西...... – Marko

8

它们是不可变的类型。不可变类型的想法是它们代表一个值,所以不能改变。如果您需要一个新值,则创建一个新值。

比方说,你的元组的第一个值需要改变,只是这样做:

myValue = Tuple.Create(newValue, myValue.Item2); 

要理解为什么不变性是很重要的,考虑一个简单的情况。我有一个课程,说包含最低和最高温度。我可以将它存储为两个值并提供两个属性来访问它们。或者我可以将它们存储为一个元组并提供一个提供该元组的单个属性。如果元组是可变的,其他代码则可以改变这些最小值和最大值,这意味着我班内的最小值和最大值会发生变化。通过使元组不可变,我可以安全地同时传递两个值,从而确保其他代码不能篡改它们。

相关问题