C#/.NET应用程序编程开发中如何判断一个集合中是否包含某个指定的元素对象

如题,在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中。

判断是否存在的依据是CustomerId属性,这里即性判断集合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

posted @ 2023-01-13 18:27  net-sky  阅读(1151)  评论(0编辑  收藏  举报