Нет, это не так. Он не имеет никаких внутренних знаний о том, что такое Dictionary
. Для компилятора это обычный класс, поэтому он не знает его может повторить использование экземпляра в этом конкретном случае.
Это будет правильный способ сделать это:
public class Something
{
private static readonly Dictionary<string, string> _dict = new Dictionary<string, string>
{
{"a", "x"},
{"b", "y"}
}
private string Parse(string s)
{
return _dict[s];
}
}
Этот подход работает, потому что вы знаете, что делает объект, и вы также знаете, что никогда не изменяется.
Помните следующий синтаксис:
var dict = new Dictionary<string, string>
{
{"a", "x"},
{"b", "y"}
}
ли просто синтаксический сахар для этого:
var dict = new Dictionary<string, string>();
dict.Add("a", "x");
dict.Add("b", "y");
Единственное требование, чтобы сделать эту работу с любого класса, для класса в
- Внедрение
IEnumerable
- Имейте общедоступный метод
Add
.
Вы предложили использовать инструкцию switch
, но подход Dictionary
может быть более гибким. Рассмотрим, например, вы могли бы использовать другой сопоставитель равенства (например, StringComparer.OrdinalIgnoreCase
). Лучше разрешить Dictionary
справиться с этим с помощью соответствующего сравнения, чем использовать что-то вроде switch(value.ToLowerInvariant())
.
Хорошо, что GC будет удалять его после возможности метода, хотя он не детерминирован. – DevEstacion
Можете ли вы объяснить, почему вы думаете, что компилятор может оптимизировать это и как? – CodeCaster
@CodeCaster Почему: компилятор может зависеть от определенных классов .NET, и эта ситуация может быть легко обнаружена. Как: сделать его статическим, например – astef