Ich könnte hier einige downvotes bekommen, aber ich habe tatsächlich widersprüchliche Informationen durch normale Suchen gefunden und möchte eine definitive Antwort andere Leute können auch leicht finden.Wie werden C# 6.0-Standardeigenschaftswerte beim Verwenden von Funktionsaufrufen durch den Bereich zugewiesen und beeinflusst?
eine Eigenschaft in der aktuellen C# Gegeben:
public static IEnumerable<string> foo { get; set; } = new string[] { "bar", "bar2" };
Wir wissen, dass der Standardwert von foo
wie das obige Array zurück. Wenn ein anderer Wert zugewiesen wird, wird der Standardwert nicht mehr verwendet. Was aber, wenn der Fall ist:
public static IEnumerable<string> foo { get; set; } = GetMyStrings();
Mein Gedanke ist, dass diese Funktionen wie:
if(foo == null) { foo = GetMyStrings();}
und dass foo wird der Wert von seinem ersten Lauf von GetMyStrings()
für die Lebensdauer des Objekts beibehalten, es sei denn überschrieben durch einen manuell zugewiesenen Wert.
Mein Kollege besteht darauf, dass dies ein GC-Problem birgt, und dass das Ergebnis GetMyStrings()
außerhalb des Geltungsbereichs fallen und gesammelt werden kann, den Parameter "renullifying" und mehrere Aufrufe an GetMyStrings()
über die Lebensdauer des Objekts verursacht.
Wer von uns ist richtig?
Können Sie einem IEnumerable eine Zeichenfolge zuweisen? –
dcg
Das war ich verflixte das Beispiel, weil Kaffee == null. Festsetzung. – CDove
Bitte korrigieren Sie Ihr Beispiel, um zumindest kompilierbar zu sein? –