C#包含行为

C#包含行为,第1张

概述有人可以解释为什么这两种方法返回不同的值? List<CustomerSummary> summaries = new List<CustomerSummary>();for (var i = 0; i < 10; i++){var summary = new CustomerSummary() { ID = 1, Name = "foo", balance = 50.00 };if 有人可以解释为什么这两种方法返回不同的值?
List<CustomerSummary> summarIEs = new List<CustomerSummary>();for (var i = 0; i < 10; i++){var summary = new CustomerSummary() { ID = 1,name = "foo",balance = 50.00 };if (!summarIEs.Contains(summary))    summarIEs.Add(summary);}

List<CustomerSummary> summarIEs = new List<CustomerSummary>();for (var i = 0; i < 10; i++){ var summary = new CustomerSummary() { ID = 1,balance = 50.00 }; if (!summarIEs.Any(s=> s.ID == summary.ID))     summarIEs.Add(summary);}

第一种方法在列表中有10项,而第二种方法有1.为什么第一种(Contains())方法永远不会评估为真?

我想问的是为什么2个相同类型的对象具有相同的值,每个属性没有评估为等价(在第一种方法中)?

解决方法 您的第一个代码块是在循环内创建一个新实例,然后立即检查该集合中是否已存在该确切实例.它不可能 – 你刚刚创建它.

你不妨这样写:

List<CustomerSummary> summarIEs = new List<CustomerSummary>();for (var i = 0; i < 10; i++){    var summary = new CustomerSummary { ID = 1,balance = 50.00 };    summarIEs.Add(summary);}

您的第二个代码块是检查集合中是否存在具有匹配ID的任何项目.由于您已将ID硬编码为1,因此您只是第一次添加项目.之后创建的每个实例都将在if语句中返回false,并且不会被添加.

您可以通过更改ID来更改该行为:

for (var i = 0; i < 10; i++){    var summary = new CustomerSummary { ID = i,balance = 50.00 };    if (!summarIEs.Any(s=> s.ID == summary.ID))        summarIEs.Add(summary);}

同样,if语句甚至不再需要,因为您知道ID不可能已经存在于集合中,因此您可以删除该检查.

总结

以上是内存溢出为你收集整理的C#包含行为全部内容,希望文章能够帮你解决C#包含行为所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1263504.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存