有人可以解释为什么这两种方法返回不同的值?
@H_301_2@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);
}
–
@H_301_2@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); }解决方法
您的第一个代码块是在循环内创建一个新实例,然后立即检查该集合中是否已存在该确切实例.它不可能 – 你刚刚创建它.
你不妨这样写:
@H_301_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来更改该行为:
@H_301_2@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不可能已经存在于集合中,因此您可以删除该检查.