111,092
社区成员




public static class DistinctExtensions
{
public static IEnumerable<T> Distinct<T, V>(this IEnumerable<T> source, Func<T, V> keySelector)
{
return source.Distinct(new CommonEqualityComparer<T, V>(keySelector));
}
public static IEnumerable<T> Distinct<T, V>(this IEnumerable<T> source, Func<T, V> keySelector, IEqualityComparer<V> comparer)
{
return source.Distinct(new CommonEqualityComparer<T, V>(keySelector, comparer));
}
}
public class CommonEqualityComparer<T, V> : IEqualityComparer<T>
{
private Func<T, V> keySelector;
private IEqualityComparer<V> comparer;
public CommonEqualityComparer(Func<T, V> keySelector, IEqualityComparer<V> comparer)
{
this.keySelector = keySelector;
this.comparer = comparer;
}
public CommonEqualityComparer(Func<T, V> keySelector)
: this(keySelector, EqualityComparer<V>.Default)
{ }
public bool Equals(T x, T y)
{
return comparer.Equals(keySelector(x), keySelector(y));
}
public int GetHashCode(T obj)
{
return comparer.GetHashCode(keySelector(obj));
}
}
//定义
public class Person
{
public int id { set; get; }
public string name { set; get; }
}
调用:
Person pa = new Person();
pa.id = 1;
pa.name = "zxy";
Person pb = new Person();
pb.id = 2;
pb.name = "hjt";
Person pc = new Person();
pc.id = 3;
pc.name = "zxy";
List<Person> list = new List<Person>();
list.Add(pa);
list.Add(pb);
list.Add(pc);
list = list.Distinct(p => p.name, StringComparer.CurrentCultureIgnoreCase).ToList();
foreach (var value in list)
{
Response.Write(value.name + "<br />");
}
using System.Linq;
List<int> list = new List<int>();
list.Add(1);
list.Add(3);
list.Add(5);
list.Add(1);
list.Add(5);
list=list.Distinct().ToList();
foreach (var value in list)
{
Response.Write(value + "<br />");
}