コンパイラ エラー CS0445Compiler Error CS0445

アンボックス変換の結果を変更できませんCannot modify the result of an unboxing conversion

アンボックス変換の結果は一時変数に格納されます。The result of an unboxing conversion is a temporary variable. 一時変数に対して行った変更は一時的にしか維持されないため、コンパイラでは、このような変数に変更を加えることを許可していません。The compiler prevents you from modifying such variables because any modification would go away when the temporary variable goes away. これを修正するには、中間式を格納する新しい値型の変数を宣言し、その変数へのボックス化解除の変換の結果を代入します。To fix this, declare a new value-type variable to store the intermediate expression, and assign the result of the unboxing conversion to that variable.

次のコードでは CS0455 が生成されます。The following code generates CS0455.

// CS0445.CS  
class UnboxingTest  
{  
    public static void Main()  
    {  
        Point p;  
        p.x = 1;  
        p.y = 2;  
        object obj = p;  
        // The following line generates CS0445, because the result  
        // of unboxing obj is a temporary variable.  
        ((Point)obj).x = 2;  
  
        // The following lines resolve the error.  
  
        // Store the result of the unboxing conversion in p2.  
        Point p2;       
        p2 = (Point)obj;  
        // Then you can modify the unboxed value.  
        p2.x = 2;  
    }  
}  
  
struct Point  
{  
    public int x, y;  
}