最近何か別の作業をしているときに、KeyValuePair<TKey, TValue>.ToString()
実装で少し奇妙なコードに出くわしました。
public override string ToString()
{
StringBuilder stringBuilder = StringBuilderCache.Acquire(16);
stringBuilder.Append('[');
if (this.Key != null)
{
StringBuilder arg_33_0 = stringBuilder;
TKey tKey = this.Key;
arg_33_0.Append(tKey.ToString());
}
stringBuilder.Append(", ");
if (this.Value != null)
{
StringBuilder arg_67_0 = stringBuilder;
TValue tValue = this.Value;
arg_67_0.Append(tValue.ToString());
}
stringBuilder.Append(']');
return StringBuilderCache.GetStringAndRelease(stringBuilder);
}
クラスの使用をスキップStringBuilderCache
する (これは .NET 自体のパフォーマンス向上の非常に良い例です) 質問があります:
なぜですか
if (this.Key != null)
{
StringBuilder arg_33_0 = stringBuilder;
TKey tKey = this.Key;
arg_33_0.Append(tKey.ToString());
}
それならもっといい
if(this.Key != null)
{
stringBuilder.Append(this.Key.ToString());
}
?
インスタンスを直接使用する代わりに、新しいローカル変数を割り当てる利点は何ですか?