加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#包含行为

发布时间:2020-12-15 04:29:09 所属栏目:百科 来源:网络整理
导读:有人可以解释为什么这两种方法返回不同的值? ListCustomerSummary summaries = new ListCustomerSummary();for (var i = 0; i 10; i++){var summary = new CustomerSummary() { ID = 1,Name = "foo",balance = 50.00 };if (!summaries.Contains(summary)) s
有人可以解释为什么这两种方法返回不同的值?
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不可能已经存在于集合中,因此您可以删除该检查.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读