我需要一个包含一对值的结构,其中一个值将被改变。所以我的第一个想法是使用KeyValueItem或Tupple <>,但后来我看到他们只有一个getter。我不明白为什么?你会在我的情况下使用什么?我可以创建自己的课程,但有没有其他方法?为什么Tuple或KeyValueItem没有setter?
6
A
回答
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
8
它们是不可变的类型。不可变类型的想法是它们代表一个值,所以不能改变。如果您需要一个新值,则创建一个新值。
比方说,你的元组的第一个值需要改变,只是这样做:
myValue = Tuple.Create(newValue, myValue.Item2);
要理解为什么不变性是很重要的,考虑一个简单的情况。我有一个课程,说包含最低和最高温度。我可以将它存储为两个值并提供两个属性来访问它们。或者我可以将它们存储为一个元组并提供一个提供该元组的单个属性。如果元组是可变的,其他代码则可以改变这些最小值和最大值,这意味着我班内的最小值和最大值会发生变化。通过使元组不可变,我可以安全地同时传递两个值,从而确保其他代码不能篡改它们。
相关问题
- 1. 如果没有定义setter或deleter,为什么有人会使用@property?
- 2. 为什么没有sk_buff有spin_lock或mutex
- 3. JSF - 这次为什么没有调用setter?
- 4. 为什么Scala在拆包Tuple时构造一个新的Tuple?
- 5. 有什么用getter和setter
- 6. 为什么list(),dict()和tuple()比[],{}和()慢?
- 7. 为什么没有NSShort或NSByte?
- 8. 为什么没有cdirent或sys/cstat
- 9. 什么是首选,使用setter或builder?
- 10. Properties.Settings没有setter
- 11. 没有setter的readonly和prop有什么区别?
- 12. libpqxx库中没有pqxx :: tuple?
- 13. 属性没有setter
- 14. 没有getter和setter
- 15. [SKAction scaleXTo:duration:]为什么不调用xScale setter?
- 16. 为什么objectAnimator不调用setter方法
- 17. 为什么调用了uid-getter/setter(ArrayCollection)?
- 18. 为什么不List.Add()触发Setter属性?
- 19. 为什么setter和getter方法
- 20. 为什么autowire setter值未设置?
- 21. 为什么Me.components什么都没有?
- 22. 为什么我的课没有什么?
- 23. 为什么gridview.selectedColumns什么都没有?
- 24. 为什么接口或抽象类有用? (或为什么?)
- 25. 为什么指向没有对象的指针可以被要求执行setter?
- 26. 为什么你不能在scala中创建一个没有getter的setter?
- 27. 为什么没有java.lang.UnsupportedClassVersionError?
- 28. 为什么没有asyncContext.cancel()
- 29. 为什么没有uniform_distribution?
- 30. 为什么没有SortedList
字典 ?? –
Ric
关于元组:http://stackoverflow.com/questions/7787994/is-there-a-version-of-the-class-tuple-whose-items-properties-are-not-readonly-an – dcastro
至于'KeyValuePair ',因为它是一个结构体,它应该是不可变的(阅读http://blogs.msdn.com/b/ericlippert/archive/2008/05/14/mutating-readonly-structs.aspx)。 – dcastro