コードインスペクション:非変数修飾子式のプロパティに割り当てた値が失われる可能性があります
このインスペクションは、構造体の元の値ではなく一時的なコピーを変更する可能性のある代入および ++ または -- 操作を報告します。
この問題は、コード自体は有効であっても、実行時にアクセスされる値が構造体のコピーである可能性がある場合に報告されます。 よくあるケースとしては、 readonly フィールドやその他の不変アクセスパスを介して使用される制約のない汎用型パラメーターが挙げられます。 型引数が構造体であることが判明した場合、メンバーへの書き込みが失われる可能性があります。
サンプル
public interface IHasCount
{
int Count { get; set; }
}
public class Example<T>
where T : IHasCount
{
private readonly T value;
public void Set()
{
value.Count = 1;
}
}
public interface IHasCount
{
int Count { get; set; }
}
public class Example<T>
where T : class, IHasCount
{
private readonly T value;
public void Set()
{
value.Count = 1;
}
}
アクセスされた値が既知の構造体コピーである場合、関連するクイックフィックスにより、コードを書き換えて、 with 式を使用して構造体を明示的にコピーおよび更新することができます。
構造体コピーの例
public class C
{
public MyStruct? Value { get; set; }
public void M()
{
Value.Value.Count = 1;
}
}
public struct MyStruct
{
public int Count;
}
public class C
{
public MyStruct? Value { get; set; }
public void M()
{
Value = Value.Value with { Count = 1 };
}
}
public struct MyStruct
{
public int Count;
}
2026 年 6 月 12 日