würde ich nicht sagen. Aber das hängt von der Tatsache ab, dass wir wirklich über eine Feld im Gegensatz zu einer Eigenschaft sprechen, die Mai (obwohl es definitiv nicht sollte) zeigen unterschiedliche Verhalten in den zwei Schnipsel, die Sie enthalten (dh, wenn dort ist Logik mit Nebenwirkungen im Getter).
aktualisieren: Wenn Sie über Performance-Overhead zu sprechen sind, gibt es praktisch keine Differenz- aber Ich glaube Zuordnung ist immer so etwas weniger teuer (als den Wert zu lesen). Hier ist ein Beispielprogramm dies zu demonstrieren:
bool b = false;
Stopwatch sw = Stopwatch.StartNew();
for (int i = 0; i < int.MaxValue; ++i)
{
b = true;
}
sw.Stop();
TimeSpan setNoCheckTime = sw.Elapsed;
sw = Stopwatch.StartNew();
for (int i = 0; i < int.MaxValue; ++i)
{
// This part will never assign, as b will always be true.
if (!b)
{
b = true;
}
}
sw.Stop();
TimeSpan checkSetTime = sw.Elapsed;
Console.WriteLine("Assignment: {0} ms", setNoCheckTime.TotalMilliseconds);
Console.WriteLine("Read: {0} ms", checkSetTime.TotalMilliseconds);
Ausgang auf meinem Rechner:
Assignment: 2749.6285 ms
Read: 4543.0343 ms
Ich stimme dir zu, ich bin mir sicher, dass es vernachlässigbar ist! Ernsthaft, aber eine viel interessantere Frage ist, welche klarer und einfacher zu pflegen ist. –
und für Ihre eigentliche Frage werden die zwei verschiedenen Pfade in der Version mit dem if verschiedene Zeiten dauern, so dass Sie nicht wirklich antworten können, ohne die Wahrscheinlichkeit jedes Pfades zu kennen. Trotzdem würde ich kaum glauben, dass die unbedingte bedingungslose Aufgabe geschlagen werden würde. –
Wenn ich ein solches Problem habe, benutze ich zuerst einen, der sich in diesem Fall um die Leistung kümmert, es ist deine Konvention. –