【发布时间】:2016-09-17 11:29:15
【问题描述】:
假设我有一个类Composite,它由仪器和重量的字典构成。
public IReadOnlyDictionary<Instrument, double> Underlyings{ get; private set; }
public Composite(
Id id,
Currency currency,
Dictionary<Instrument, double> underlyings
)
{
Underlyings= underlyings;
}
}
这个类暴露给客户端,我希望客户端能够修改Underlyings中现有的键值,但不向Underlyings添加新的键值对。
然后将Underlyings 设置为ReadOnlyDictionary 将不起作用,因为客户端代码将无法修改现有键的值。所以我的解决方案是使用来自this answer 的字典的包装器并修改TValue IDictionary<TKey, TValue>.this[TKey key] 的设置器,以便可以修改现有值。但这似乎是一个愚蠢的解决方案 - 有没有比编写包装类更简单的方法来拥有一个字典,该字典具有可修改的现有键值对,但不能添加新的键值对?为这个非常简单的问题道歉。
【问题讨论】:
-
@Damien_The_Unbeliever 抱歉,如果我误解了您的建议,但我认为属性不会起作用,因为 Composite 只是仪器的集合,它们本身没有重量。重量只属于复合材料本身。每个工具的权重必须一直重新平衡(或更改),但它们并不是工具本身的固有属性 - 它们仅存在于该组合的上下文中。并且有数百种不同的复合材料。如果这有任何意义?
标签: c# .net dictionary readonly readonly-collection