c#运算符重载用法
所以,我从来没有使用过操作符的重载功能,我试图弄清楚如何将对象从我的类(Person)添加到我的集合类(ListOfPeople)中 ListOfPeople包含一个属性c#运算符重载用法,c#,overloading,operator-keyword,C#,Overloading,Operator Keyword,所以,我从来没有使用过操作符的重载功能,我试图弄清楚如何将对象从我的类(Person)添加到我的集合类(ListOfPeople)中 ListOfPeople包含一个属性List PeopleList 我的困难在于如何在这个方法中获得一个预先存在的列表,以便向其中添加一个新人ListOfPeople temp=新的ListOfPeople(x) 这一行有一个错误,因为我并没有接受ListOfPeople参数的构造函数。如果我让它成为ListOfPeople temp=newlistofPeopl
List PeopleList
我的困难在于如何在这个方法中获得一个预先存在的列表,以便向其中添加一个新人<代码>ListOfPeople temp=新的ListOfPeople(x)代码>
这一行有一个错误,因为我并没有接受ListOfPeople参数的构造函数。如果我让它成为ListOfPeople temp=newlistofPeople()代码>然后Temp会调用我的默认构造函数,在这里我只创建一个新的空列表,这也不允许我添加到一个预先存在的列表中
我只是不确定如何让“temp”实际引用我之前存在的列表。使用如下:
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;
}
- 第一个允许您使用:
list=list+person
- 第二个允许您使用:
list=person+list
您可能还希望重载+=
运算符(非静态),以便可以使用list+=person
编辑
虽然我解决了上面提到的问题。但是,我同意其他人关于“+”的操作数是不可变的
下面是对现有代码的更新(假设ListOfPeople.PeopleList是List
):
使用方法如下:
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;
}
- 第一个允许您使用:
list=list+person
- 第二个允许您使用:
list=person+list
您可能还希望重载+=
运算符(非静态),以便可以使用list+=person
编辑
虽然我解决了上面提到的问题。但是,我同意其他人关于“+”的操作数是不可变的
下面是对现有代码的更新(假设ListOfPeople.PeopleList是List
):
您不应该使用+运算符将项添加到集合中。我相信这是一个不应该使用运算符重载的例子,它是在集合类中的列表中添加一个对象。这还是同样糟糕吗?是的,看看其他.NET列表是如何实现添加项的,它总是通过Add
方法实现的;但是如果我做了-我就不会做包含检查。如果有人想多次添加它,这是他们的问题。您不应该使用+运算符将项添加到集合中。我相信这是一个不应该使用运算符重载的例子,它是在集合类中的列表中添加一个对象。这还是同样糟糕吗?是的,看看其他.NET列表是如何实现添加项的,它总是通过Add
方法实现的;但是如果我做了-我就不会做包含检查。如果有人想多次添加它,这就是他们的问题。我认为定义++后,+=是隐式的?我的错。对<代码>+=
解析为+
。LH操作数取决于+=。看,我真的会阻止这样的事情!它意味着没有给予的东西!对于(a+b),我希望a保持不变,并得到一个新的结果。使用您的代码,列表将更改,无论您是否指定值!同意@justanotheruseYouknow写的:)我认为+=是隐含的,一旦你定义了+?我的错。对<代码>+=
解析为+
。LH操作数取决于+=。看,我真的会阻止这样的事情!它意味着没有给予的东西!对于(a+b),我希望a保持不变,并得到一个新的结果。使用您的代码,列表将更改,无论您是否指定值!同意@justanotheruseYouknow所写的:)
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;
}