C# LINQ Distinct(IEqualityComparer) help
本文关键字:help IEqualityComparer LINQ Distinct | 更新日期: 2023-09-27 18:05:29
我有一个用户可以添加文件的通用列表。我试图让它删除一个对象,如果源已经存在于列表中的另一个对象。我还要提一下,我刚开始使用System.Linq的特性。
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;
}
}
我不明白为什么Distinct(IEqualityComparer)不工作。
imagePlaylist = imagePlaylist.Distinct(new MediaInfoComparer()).ToList();
谢谢,
字符串比较返回负、0或正;这不是布尔运算。有关详细信息,请参阅此链接。所以你会有两种情况,它返回假,一种返回真。此外,当字符串实际上不相同时,它返回true。
基本上,你需要做的是:
return string.Compare(x.source, y.Source, true) == 0;
IEqualityComparer
逻辑是反向的:
string.Compare
返回0
。
0
时, Convert.ToBoolean
将返回false