ホームページ > バックエンド開発 > C++ > C# の構造体のリスト内の要素を変更するにはどうすればよいですか?

C# の構造体のリスト内の要素を変更するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-05 19:39:45
オリジナル
551 人が閲覧しました

How Can I Modify Elements in a C# List of Structs?

構造体のリスト内の要素を変更する

C# では、構造体は値型であり、各インスタンスがデータの独自のコピーを保持することを意味します。この動作は、参照が同じ基礎となるオブジェクトを指すクラスとは異なります。構造体のリストを操作する場合、これらの値の型のセマンティクスを理解することが重要です。

次のコードを検討してください。

List<MyStruct> MyList = new List<MyStruct>();
MyList.Add(new MyStruct("john"));
MyList.Add(new MyStruct("peter"));

MyList[1].Name = "bob"; // Attempt to modify an element
ログイン後にコピー

このコードは、MyList の戻り値が返されたことを示すエラーをトリガーします。 [int] は変数ではないため変更できません。このエラーは、値の型が割り当て時にコピーされることが原因で発生します。

Struct obItem = MyList[1]; // Creates a new instance of MyStruct
obItem.Name = "Gishu"; // Modifies the new instance
ログイン後にコピー

ここで、obItem は、MyList[1] からのデータのコピーを持つ MyStruct の新しいインスタンスです。 obItem に加えられた変更は、リスト内の元の要素には影響しません。

解決策:

構造体のリスト内の要素を変更する必要がある場合は、次の点を考慮してください。オプション:

  1. 代わりにクラスを使用します: クラスは参照型であるため、基礎となるオブジェクトに変更を加えて、コード全体に反映します。
  2. インターフェイスを公開する: 構造体はインターフェイスを実装できるため、インターフェイス参照を介して実際の構造体を変更できます。このアプローチではボクシングが導入されているため、慎重に使用する必要があります。

インターフェイスを使用した例を次に示します:

public interface IMyStructModifier
{
    String Name { set; }
}
public struct MyStruct : IMyStructModifier ...

List<Object> obList = new List<Object>();
obList.Add(new MyStruct("ABC"));
obList.Add(new MyStruct("DEF"));

IMyStructModifier temp2 = obList[1] as IMyStructModifier;
temp2.Name = "Now Gishu";

foreach (MyStruct s in obList) // => "ABC", "Now Gishu"
{
    Console.WriteLine(s.Name);
}
ログイン後にコピー

結論:

クラスのリストは要素を変更するためのより高い柔軟性を提供しますが、値のセマンティクスが必要な場合には構造体が役立ちます。値の型の性質を理解し、代替ソリューションを検討することで、C# で構造体のリストを効果的に操作できるようになります。

以上がC# の構造体のリスト内の要素を変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート