1

最近何か別の作業をしているときに、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());
    }

?

インスタンスを直接使用する代わりに、新しいローカル変数を割り当てる利点は何ですか?

4

2 に答える 2