2

C# で手動のセッター/ゲッター メソッドを作成しようとしていますが、"set" 行から次のエラーが発生します: エラー: 'System.Collections.Generic.ListPackage.Add( Package)' には無効な引数があります

private List<Package> packages = new List<Package>();    

public List<Package> Packages
{
    set { packages.Add(value); }
    get { return packages; }
}
4

6 に答える 6

6

コードは次のようになります。

private var packages = new List<Package>();    

public List<Package> Packages
{
    set { packages = value; }
    get { return packages; }
}

ある種のパススルーにインデックス getter/setter を使用しようとしている場合:

public int this[int key]
{
    get
    {
        return Packages[key];
    }
    set
    {
        Packages[key] = value;
    }
}
于 2013-09-18T11:37:46.090 に答える
3

getter/setter では、入力と出力の型が同じでなければなりません。(したがって、宣言は- の入力と出力をpublic List<Package> Packages { ...期待しています。List<Packages>List<Packages>

ここで行っているのは、get入力List<Package>してset入力しようとしていることですPackage。これは許可されていません。

あなたがやりたいと思うことは次のとおりです。

private List<Package> packages = new List<Package>();    

public List<Package> Packages
{
    // no setter
    get { return packages; }
}

myObject.Packages次に、すべてのパッケージを取得しmyObject.Packages.Add(package)て追加するために呼び出します。

于 2013-09-18T11:37:23.083 に答える
1

を本当に追加したい場合valueは、List<Package>packages使用する必要があります

set { packages.AddRange(value); }

さもないと、

set { packages = value; }
于 2013-09-18T11:40:25.863 に答える
1

それをしてはいけない。

要素を設定しようとしている場合は...

public void addPackage(Package pack){
    packages.Add(pack);
}

使用法: MyClass m= new MyClass(); m.addPackage(新しいパッケージ());

コレクションを設定しようとしている場合...

public List<Package> Packages
{
    set { packages=value; }
    get { return packages; }
}

利用方法:

MyClass m= new MyClass();
m.Packages=new List<Package>();
于 2013-09-18T11:47:34.850 に答える
0

ここで少し混乱していると思います。

パッケージのタイプList<Package>は です。を呼び出しているときpackages.Add(value);packages実際にはList<Package>です。

public List <Package> Packages
{
    get { return packages; }
    set { packages = value; }
}

これにより、プロパティが修正されます。

アイテムを追加するには:

Packages.Add(myPackage);
于 2013-09-18T11:38:46.653 に答える
0

set{}メソッドをメソッドとして使用しようとしていますがAdd、そうではありません。 コレクション全体setを変更するために使用されますが、メソッドはコレクションに項目を追加します。他の回答で述べられていることは正しいです...新しいコレクションを割り当てるのではなく、オペレーターにコレクションに追加してもらいたい場合は、使用できますが、わかりやすくするために、その場合はオペレーターをオーバーライドする必要があります。Add=AddRange()=

于 2013-09-18T11:49:19.517 に答える