Просто используйте 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; }
}
}
Глядя очень странно. –
Ну, он выделяет каждый раз при вызове метода. Возможно, просто используйте ['ImmutableDictionary'] (https://msdn.microsoft.com/en-us/library/dn467181 (v = vs.111) .aspx) вместо этого? – vcsjones
Он также использует много строк в буфере редактора;) – Dai