如题,在C#/.NET应用程序编程开发中如何判断一个集合中是否包含某个指定的素对象?
比如当前有一个对象集合(List):
List<Customer> customers
Customer.cs类似如下:
public class Customer
{
public int Id{get;set;}
public string Name {get;set;}
// ...
}
现在需要向这个集合customers
中添加对象:
var customer = new Customer {
Id = 1,
Name = "Customer 1"
};
customers.Add(customer);
但在添加之前要先检测判断这个customer
对象是否已在集合elements
中了,如果已经存在则不添加,否则将这个指定的customer
对象添加到集合elements
中。
判断是否存在的依据是
Customer
的Id
属性,这里即性判断集合customers
中是否有Id为1的Customer
元素对象。
在C#/.NET应用程序编程开发中,实现判断一个集合中是否包含某个指定的元素对象的方法有哪些呢?
方案一
在C#/.NET中,自从有了LINQ,便可以很方便、快捷地实现判断一个集合中是否包含某个指定元素、对象的方法。C#内置了LINQ的静态扩展方法Any()
和Exists()
,这两个方法都可以快速判断一个元素、对象是否存在于一个集合中,示例如下:
var exists = customers.Any(x=>x.Id==customer.Id);
或者
var exists = customers.Exists(x=>x.Id==customer.Id);
这两个方法(
Any()
和Exists
)均可以完成,至于这两个方法的异同这里不扩展介绍。
方案二
除了使用C#中内置的LINQ的静态扩展方法Any()
或者Exists()
外,还可以使用LINQ的其它扩展,这里使用Count()
,如下:
var customers = new List<Customer>
{
new Customer{Id = 1,Name="Customer 1"}
};
var exists = customers.Count(x=>x.Id==1) > 0;
Console.WriteLine(exists);
运行结果为:True
方案三
使用LINQ内置的FirstOrDefault()
扩展方法,示例如下:
var customers = new List<Customer>
{
new Customer{Id = 1,Name="Customer 1"}
};
var exists = customers.FirstOrDefault(x=>x.Id==1) == null ? false:true;
Console.WriteLine(exists);
运行结果为:True
方案四
使用LINQ内置的SingleOrDefault()
扩展方法,示例如下:
var customers = new List<Customer>
{
new Customer{Id = 1,Name="Customer 1"}
};
var exists = customers.SingleOrDefault(x=>x.Id==1) == null ? false:true;
Console.WriteLine(exists);
运行结果为:True
方案五
除了使用C#语言中的LINQ实现外,还可以使用传统的循环去判断检测咯,如下:
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public static void Main()
{
var customers = new List<Customer>
{
new Customer{Id = 1,Name="Customer 1"},
new Customer{Id = 2,Name="Customer 2"}
};
var customer = new Customer{Id = 1,Name="Customer 1"};
var exists = customers.Inculde(customer);
Console.WriteLine(exists);
}
}
public static class ExistExtensions
{
public static bool Inculde(this List<Customer> customers,Customer customer)
{
var exists = false;
foreach(var c in customers){
if(customer.Id==c.Id){
exists = true;
break;
}
}
return exists;
}
}
public class Customer
{
public int Id{get;set;}
public string Name {get;set;}
// ...
}
运行结果为:True
相信这里列举的实现方式并不完整,睿智的你肯定还有其它实现方案,欢迎交流补充。
版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册