我試圖創建一個看起來像這樣的擴展方法比較GUID的時候......意外的行爲在.NET
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
我發現事實上,即使Guids是相同的比較將始終返回false。
是什麼原因呢?
什麼'MyObject'? – reuben
包含類型爲guid的字段ID的自定義類。對不起,如果這不清楚... –
也許我錯過了一些東西,但如果它是一種類型,爲什麼你將它傳遞到'myFunction'或'myFunction1'? – reuben