No, non lo farà. Non ha alcuna conoscenza intrinseca di cosa sia un Dictionary
. Per il compilatore, è solo una classe normale, quindi non lo sa. potrebbe riutilizzare l'istanza in questo caso particolare.
questo sarebbe il modo corretto di fare questo:
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];
}
}
Questo approccio funziona perché si sa che cosa l'oggetto fa e si sa anche che non è mai modificato.
Ricordate la seguente sintassi:
var dict = new Dictionary<string, string>
{
{"a", "x"},
{"b", "y"}
}
è solo zucchero sintattico per questo:
var dict = new Dictionary<string, string>();
dict.Add("a", "x");
dict.Add("b", "y");
L'unico requisito per fare questo lavoro con qualsiasi classe, è per la classe a
- Implementare
IEnumerable
- Avere un metodo pubblico
Add
.
È suggerito di utilizzare un'istruzione switch
, ma l'approccio Dictionary
può essere più flessibile. Si consideri ad esempio che si potrebbe voler utilizzare un comparatore di uguaglianza diverso (come StringComparer.OrdinalIgnoreCase
). È meglio lasciare che sia lo Dictionary
a gestirlo utilizzando il confronto corretto piuttosto che usare qualcosa come switch(value.ToLowerInvariant())
.
fonte
2014-11-14 08:44:37
Bene, il GC lo esporrà in modo prolifico dopo l'ambito del metodo, sebbene non sia deterministico. – DevEstacion
Puoi spiegare perché pensi che un compilatore possa ottimizzare questo e come? – CodeCaster
@CodeCaster Perché: il compilatore può dipendere da classi .NET specifiche e questa situazione può essere rilevata facilmente. Come: renderlo statico, ad esempio – astef