Wenn ich String.Join
Methode Implementierung anschaute, sah ich eine for-Schleife wie folgt aus:Ist diese if-Anweisung redundant oder nicht?
public static string Join(string separator, params object[] values)
{
...
for (int index = 1; index < values.Length; ++index)
{
sb.Append(separator);
if (values[index] != null) // first if statement
{
string str2 = values[index].ToString();
if (str2 != null) // second if statement
sb.Append(str2);
}
}
...
}
Hier zweite if-Anweisung überflüssig scheint me.I dachte, wenn values[index] != null
wahr dann ist, wie values[index].ToString() == null
könnte wahr? Soviel ich weiß ToString
muss immer etwas zurückgegeben werden, oder? Selbst wenn der Typ die Methode ToString
nicht überschreibt, sollte er vollständig qualifizierten Namen (Namespace + Klassenname) zurückgeben. Wenn ich es in .NET Framework-Quellcode sehe, dachte ich, dass es vielleicht einen Grund gibt und ich vermisse etwas. Wenn es einen Grund gibt, was ist es?
Ich nehme an, Sie ToString implementieren könnte und null zurück –
Sie könnten einen Schritt weiter gehen und loszuwerden 'if (Werte [index]! = Null)', auch. Per [MSDN] (http://msdn.microsoft.com/en-us/library/5atxc566.aspx), "Die Append (Object) -Methode ruft die Object.ToString-Methode auf, um die Zeichenfolgendarstellung von value zu erhalten. Wenn value ist Null, es werden keine Änderungen am StringBuilder-Objekt vorgenommen. " Die innere Schleife könnte also durch 'sb.Append (separator) ersetzt worden sein; sb.Append (Werte [Index]); "Wohlgemerkt, es können winzige Leistungsunterschiede zwischen den beiden Ansätzen sein. – Brian