Просто используйте ReadOnlyDictionary и выделите его только один раз:
public static class ComboModel {
private static readonly ReadOnlyDictionary<int, int[]> _items = new ReadOnlyDictionary<int, int[]>(new Dictionary<int, int[]> {
{
1,
new[] {
2,
3,
4
}
}
});
public static IReadOnlyDictionary<int, int[]> Items
{
get { return _items; }
}
}
Обратите внимание, что вы не только выделяете новый экземпляр при каждом вызове, как уже упоминалось другими, но вы также даете вызывающему абоненту неправильное ощущение, что он может изменить этот словарь. В ReadOnlyDictionary нет методов, которые могут его модифицировать. Есть и другие преимущества, когда вызывающая сторона знает, что полученная структура не может быть изменена: например, он может безопасно обрабатывать элементы в нескольких потоках.
Обновление: конечно, коллекции только для чтения волшебным образом не делают объекты, хранящиеся в этих коллекциях, доступными только для чтения - только сама коллекция. Если вы хотите обеспечить неизменность массивов int[] в своем примере, просто сделайте их доступными только для чтения:
public static class ComboModel {
private static readonly IReadOnlyDictionary<int, ReadOnlyCollection<int>> _items = new ReadOnlyDictionary<int, ReadOnlyCollection<int>>(new Dictionary<int, ReadOnlyCollection<int>> {
{
1,
Array.AsReadOnly(new[] {
2,
3,
4
})
}
});
public static IReadOnlyDictionary<int, ReadOnlyCollection<int>> Items
{
get { return _items; }
}
}
person
Evk
schedule
31.03.2016
ImmutableDictionary
? - person vcsjones   schedule 31.03.2016Items()
, который вызывающая сторона может изменять самостоятельно? - person vcsjones   schedule 31.03.2016