在C#中,使用Distinct()方法可以从列表中删除重复的元素。然而,默认情况下,Distinct()方法不会删除空字符串值,并且会区分大小写。如果我们想要删除空字符串值并忽略大小写,可以自定义一个比较器。
首先,我们需要创建一个自定义的比较器类,实现IEqualityComparer接口。在这个比较器类中,我们可以定义比较两个元素是否相等的逻辑,并且可以忽略大小写。
下面是一个示例的自定义比较器类:
public class IgnoreCaseStringComparer : IEqualityComparer<string>
{
public bool Equals(string x, string y)
{
if (x == null && y == null)
return true;
if (x == null || y == null)
return false;
return string.Equals(x, y, StringComparison.OrdinalIgnoreCase);
}
public int GetHashCode(string obj)
{
if (obj == null)
return 0;
return obj.ToLower().GetHashCode();
}
}
接下来,我们可以在使用Distinct()方法时,传入自定义的比较器对象来实现删除空字符串值并忽略大小写的功能。
List<string> list = new List<string> { "apple", "banana", "", "Apple", "orange", "" };
List<string> distinctList = list.Distinct(new IgnoreCaseStringComparer()).Where(s => !string.IsNullOrEmpty(s)).ToList();
foreach (string item in distinctList)
{
Console.WriteLine(item);
}
以上代码将输出:
apple
banana
orange
在这个例子中,我们使用了自定义的比较器IgnoreCaseStringComparer来忽略大小写,并且使用Where()方法过滤掉空字符串值。最终得到的distinctList列表中包含了删除空字符串值并忽略大小写的结果。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云