1
public static ListOfPeople operator +( ListOfPeople x, Person y)
    {
        ListOfPeople temp = new ListOfPeople(x);
        if(!temp.PeopleList.Contains(y))
        {
            temp.PeopleList.Add(y);
        }
        temp.SaveNeeded = true;
        return temp;
    }

そのため、演算子のオーバーロード機能を使用したことがなく、クラス (Person) からコレクション クラス (ListOfPeople) にオブジェクトを追加する方法を理解しようとしています。

ListOfPeople には属性が含まれていますList<Person> PeopleList

私の困難は、このメソッド内で既存の List を取得して新しい Person を追加する方法にあります。ListOfPeople temp = new ListOfPeople(x);

ListOfPeople 引数を取るコンストラクターがないため、この行にエラーがあります。私がそれを行うとしたらListOfPeople temp = new ListOfPeople();、Temp はデフォルトのコンストラクターを呼び出して、新しい空のリストを作成するだけで、既存のリストに追加することもできません。

「temp」を取得して既存のリストを実際に参照する方法がわかりません。

4

1 に答える 1

1

次のように使用します。

public static ListOfPeople operator +( ListOfPeople x, Person y)
{
    ListOfPeople temp = x;
    if(!temp.PeopleList.Contains(y))
    {
        temp.PeopleList.Add(y);
    }
    temp.SaveNeeded = true;
    return temp;
}

public static ListOfPeople operator +( Person y, ListOfPeople x)
{
    ListOfPeople temp = x;
    if(!temp.PeopleList.Contains(y))
    {
        temp.PeopleList.Add(y);
    }
    temp.SaveNeeded = true;
    return temp;
}
  • 1stでは、次を使用できます。list = list + person
  • 2番目では、次を使用できます。list = person + list

+=使用できるように、演算子(非静的)をオーバーロードすることもできますlist += person

編集

私は言及された問題を解決しましたが。しかし、それでは、「+」のオペランドが不変であるという点で他の人に同意します。

以下は、既存のコードの更新です ( と仮定してListOfPeople.PeopleList is List<Person>):

public static ListOfPeople operator +( ListOfPeople x, Person y)
{
    ListOfPeople temp = new ListOfPeople();
    temp.PeopleList.addRange(x);
    if(!temp.PeopleList.Contains(y))
    {
        temp.PeopleList.Add(y);
    }
    temp.SaveNeeded = true;
    return temp;
}

public static ListOfPeople operator +( Person y, ListOfPeople x)
{
    ListOfPeople temp = new ListOfPeople();
    temp.PeopleList.addRange(x);
    if(!temp.PeopleList.Contains(y))
    {
        temp.PeopleList.Add(y);
    }
    temp.SaveNeeded = true;
    return temp;
}
于 2013-02-17T17:07:06.257 に答える