2011-08-15 40 views
1

我有一個通用列表,用戶可以添加文件。我試圖讓它刪除一個對象,如果源已經存在於列表中的另一個對象中。我還會提到我是使用System.Linq的功能的新手。C#LINQ區別(IEqualityComparer)幫助

如果類型的MediaInfo名單:

public static List<MediaInfo> imagePlaylist = new List<MediaInfo>(); 

這是對的MediaInfo結構和的IEqualityComparer代碼:

public struct MediaInfo 
{ 
    public string source; 
    public char? type;   
} 
public class MediaInfoComparer : IEqualityComparer<MediaInfo> 
{ 
    public bool Equals(MediaInfo x, MediaInfo y) 
    { 
     return Convert.ToBoolean(string.Compare(x.source, y.source, true)); 

    } 

    public int GetHashCode(MediaInfo obj) 
    { 
     if (Object.ReferenceEquals(obj, null)) return 0; 
     int hashProductName = obj.source == null ? 0 : obj.source.GetHashCode(); 
     int hashProductCode = obj.type.GetHashCode(); 
     return hashProductName^hashProductCode; 
    } 
} 

我不明白爲什麼鮮明(的IEqualityComparer)不加工。

imagePlaylist = imagePlaylist.Distinct(new MediaInfoComparer()).ToList(); 

謝謝,

回答

3

字符串比較返回否定,0,或正數;這不是一個布爾操作。詳情請參閱this鏈接。所以你有兩種情況返回false,一個返回true。另外,它返回true的情況是字符串實際上並不相同。

基本上,你需要做的是這樣的:

return string.Compare(x.source, y.Source, true) == 0; 
1

IEqualityComparer邏輯是倒退:

string.Compare將返回0當兩個字符串是相等的。當參數爲0時,將返回false

+0

謝謝你們兩位的答案。我什至不認爲這個錯誤是在string.Compare>。<。 – zaza