Es gibt Zeiten, in denen ich einen an eine Methode übergebenen Wert innerhalb der Methode selbst ändern muss. Ein Beispiel wäre das Bereinigen einer Zeichenfolge wie der folgenden:
void SanitizeName(string Name)
{
Name = Name.ToUpper();
//now do something here with name
}
Dies ist rein harmlos, da das NameArgument nicht als Referenz übergeben wird. Wenn jedoch ein Entwickler in Zukunft aus irgendeinem Grund entscheidet, dass alle Werte per ref übergeben werden, wirkt sich eine Bereinigung des Strings auf den Wert außerhalb der Methode aus, was zu nachteiligen Ergebnissen führen kann.
Anstatt das Argument selbst neu zuzuweisen, erstelle ich daher immer eine lokale Kopie wie folgt:
void SanitizeName(string Name)
{
var SanitizedName = Name.ToUpper();
//now do something here with name
}
Dies stellt sicher, dass Änderungen an der Übergabe des Werts niemals die Vorgänge außerhalb der Methode beeinflussen, aber ich frage mich, ob ich diesbezüglich übermäßig paranoid bin.
if (param == NULL) param = default_value;?
by refder nicht übergeben wurde Um aus irgendeinem Grund den lokalen Zugriff in einen nicht lokalen Zugriff umzuwandeln, muss er die Konsequenzen immer sorgfältig prüfen.
Name = Name.ToUpper();macht es schwieriger, dem Code in Ihrem Kopf zu folgen, wenn sich der WertNameändert. Ihr zweites Beispiel ist nicht nur zukunftssicherer, es ist auch einfacher zu überlegen, was es tut.