public static class LinqExtensions
{
public static IEnumerable<T> DistinctBy<T, TResult>(this IEnumerable<T> source, Func<T, TResult> keySelector)
{
EqualityComparer<T, TResult> compare = new EqualityComparer<T, TResult>(keySelector);
return source.Distinct(compare);
}
public static IEnumerable<T> ExceptBy<T, TResult>(this IEnumerable<T> first, IEnumerable<T> second, Func<T, TResult> keySelector)
{
EqualityComparer<T, TResult> compare = new EqualityComparer<T, TResult>(keySelector);
return first.Except(second, compare);
}
}
public class EqualityComparer<T, TResult> : IEqualityComparer<T>
{
private Func<T, TResult> selector { get; set; }
public EqualityComparer(Func<T, TResult> selector)
{
this.selector = selector;
}
public bool Equals(T left, T right)
{
bool result = true;
if (left == null && right == null)
{
result = true;
}
else if (left == null ^ right == null)
{
result = false;
}
else
{
var leftProp = selector.Invoke(left);
var rightProp = selector.Invoke(right);
EqualPropertie(leftProp, rightProp, ref result);
}
return result;
}
public int GetHashCode(T obj)
{
return obj == null ? 0 : obj.ToString().GetHashCode();
}
private void EqualPropertie<TObject>(TObject left, TObject right, ref bool result)
{
var propertyInfos = left.GetType().GetProperties();
foreach (var parentItem in propertyInfos)
{
if (!result)
{
return;
}
var leftProp = parentItem.GetValue(left);
var rightProp = parentItem.GetValue(right);
if (parentItem.PropertyType.IsClass && parentItem.PropertyType.Name != "String")
{
EqualPropertie(leftProp, rightProp, ref result);
}
else
{
if (leftProp == null && rightProp == null)
{
result = true;
}
else if (leftProp == null ^ rightProp == null)
{
result = false;
}
else
{
result = leftProp.Equals(rightProp);
}
}
}
}
}
C#使用IEqualityComparer <T>接口
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來逃糟,“玉大人吼鱼,你說我怎么就攤上這事〈卵剩” “怎么了菇肃?”我有些...
- 文/不壞的土叔 我叫張陵,是天一觀的道長取募。 經(jīng)常有香客問我琐谤,道長,這世上最難降的妖魔是什么玩敏? 我笑而不...
- 正文 為了忘掉前任斗忌,我火速辦了婚禮,結(jié)果婚禮上旺聚,老公的妹妹穿的比我還像新娘织阳。我一直安慰自己,他們只是感情好砰粹,可當我...
- 文/花漫 我一把揭開白布唧躲。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪弄痹。 梳的紋絲不亂的頭發(fā)上饭入,一...
- 文/蒼蘭香墨 我猛地睜開眼凭疮,長吁一口氣:“原來是場噩夢啊……” “哼饭耳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起执解,我...
- 正文 年R本政府宣布,位于F島的核電站规惰,受9級特大地震影響睬塌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜歇万,卻給世界環(huán)境...
- 文/蒙蒙 一揩晴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧堕花,春花似錦文狱、人聲如沸粥鞋。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至壕曼,卻和暖如春苏研,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背腮郊。 一陣腳步聲響...