我已经尝试创建一个类似下面这样的扩展方法...
这个想法是我可以做像这样的事情...
现在我本来期望只返回我不同的项,但是我发现情况并非如此。
进一步研究后,使用以下代码来分解这种方法。
我发现即使Guid相同,比较结果仍将返回false。
这是什么原因?
public static IEnumerable<T> Distinct<T>(this IEnumerable<T> value, IEnumerable<T> compareTo, Func<T, object> compareFieldPredicate)
{
return value.Where(o => !compareTo.Exists(p => compareFieldPredicate.Invoke(p) == compareFieldPredicate.Invoke(o)));
}
这个想法是我可以做像这样的事情...
IEnumerable<MyCollection> distinctValues = MyCollection.Distinct(MyOtherCollection, o => o.ID); //Note that o.ID is a guid
现在我本来期望只返回我不同的项,但是我发现情况并非如此。
进一步研究后,使用以下代码来分解这种方法。
Guid guid1 = Guid.NewGuid();
Guid guid2 = new Guid(guid1.ToString());
Func<MyObject, object> myFunction = o => o.ID;
Func<MyObject, object> myFunction1 = o => o.ID;
bool result = myFunction(MyObject) == myFunction1(MyObject);
//result = false
我发现即使Guid相同,比较结果仍将返回false。
这是什么原因?
myFunction
或myFunction1
中呢? - reuben