gpt4 book ai didi

c# - 重载用于删除对象的减法运算符

转载 作者:太空宇宙 更新时间:2023-11-03 20:18:49 25 4
gpt4 key购买 nike

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,它保存的数据很好,但它与列表中已有的项目不匹配。

最佳答案

正如@sapi 和@TheEvilPenguin 已经指出的那样,这种类型的运算符重载不受欢迎有几个非常充分的理由。然而,这并没有回答您的问题。

如果没有关于在 Z = x - p 语句中从何处获取 p 的更多信息,我怀疑您的问题是 p 不是列表中存在的元素。

请记住,ContainsRemove 仅对列表中对象的特定实例有效。

List<Tuple<int, int>> collection = new List<Tuple<int, int>>();
collection.Add(new Tuple<int, int>(1, 1));
if (collection.Contains(new Tuple<int, int>(1, 1))
{
Console.WriteLine("This will NEVER happen.");
}
collection.Remove(new Tuple<int, int>(1, 1);
Console.WriteLine("{0}", collection.Count); // => 1

如果您想测试是否存在与测试值具有相同属性的类型的任何实例,那么 Contains 不会这样做。 p>

还有一点,- 运算符不应该(有些人会说必须不)修改左边-手操作数。您应该返回一个包含筛选项的新列表,因为这是 A - B 的语法操作。

关于c# - 重载用于删除对象的减法运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14948778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com