首页 / C#开发 / 正文

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

8008 1 发布于: 2019-06-03 读完约需8分钟

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

相信这里列举的实现方式并不完整,睿智的你肯定还有其它实现方案,欢迎交流补充。

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

上一篇: C#/.NET应用程序编程开发中LINQ查询如何实现一个集合的分页?

下一篇: C#/.NET应用程序编程开发中如何根据主键读取或者设置(改变)特定的系统环境变量的值?

本文永久链接码友网 » C#/.NET应用程序编程开发中如何判断一个集合中是否包含某个指定的元素对象

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册