【发布时间】:2013-02-19 02:23:39
【问题描述】:
case Choices.ADD_PERSON:
Console.WriteLine("enter info for person to add.");
InfoForPerson();
PersonList Z = x + p;
break;
case Choices.REMOVE_PERSON:
Console.WriteLine("enter info for person to remove: ");
InfoForPerson();
Z = x - p;
break;
如果从菜单中选择它们的选项,会发生两件事。对于Choices.ADD_PERSON,结果符合预期,并添加了一个人。但是,我假设 + & - 会以完全相同的方式起作用,只是相反,但它并没有发生。
public static PersonList operator -(PersonList x, Person y)
{
PersonList temp = x;
if (temp._Plist.Contains(y))
{
temp._Plist.Remove(y);
}
return temp; }
以上是我对减法运算符的定义。下面是我用来允许用户选择要添加/减去的人的代码。
public static void InfoForPerson()
{
Console.Write("Enter your name: ");
string name = Console.ReadLine();
string phone = ValidPhone();
string email = ValidEmail();
p = new Person(name, phone, email);
它适用于加法,而不是减法。我看了 p 并且它保存的数据很好,但它与列表中已经存在的项目不匹配。
【问题讨论】:
-
为了在“列表”中添加/删除而重载 +/- 真的是个好主意吗?这似乎是编写非常不直观的代码的秘诀。
-
我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
-
我同意 sapi。请不要这样做。添加一个 Remove 方法,而不是尝试重新定义其他运算符来做一些与每个人认为他们会做的不同的事情。
-
@user1993843 用于对自定义类进行数学运算。例如,如果您要创建自己的
Degrees或Radians类,那么与它们一起使用+或-会很有意义。或者例如,将两个DateTime对象相减得到一个TimeSpan。在List上使用它通常是非常规的,你几乎总是看不到它。 (至少,直到今天我才拥有!) -
昨天你问这个关于加法运算符的问题:很多人告诉你这是一种反模式,或者至少非常不习惯。描述减法运算符时没有任何变化,自昨天以来也没有任何变化。
标签: c# overloading operator-keyword