.net IEqualityComparer.Equals与IEnumerable一起使用时。包含列表中的x或y值吗?
IEnumberable有一个包含两个参数的扩展方法。第一个参数是要检查的值,第二个是IEqualityComparer的实现。 查看IEqualityComparer.Equals,它需要两个名为x和y的参数来比较第一个和第二个对象 我的问题是X或Y是IEnumerable的值 范例.net IEqualityComparer.Equals与IEnumerable一起使用时。包含列表中的x或y值吗?,.net,ienumerable,iequalitycomparer,.net,Ienumerable,Iequalitycomparer,IEnumberable有一个包含两个参数的扩展方法。第一个参数是要检查的值,第二个是IEqualityComparer的实现。 查看IEqualityComparer.Equals,它需要两个名为x和y的参数来比较第一个和第二个对象 我的问题是X或Y是IEnumerable的值 范例 List test=newlist这不重要-等式应该是对称的。从以下文件: Equals方法是自反的, 对称的,可传递的。就是 如果用于比较数据,则返回true 对象本身;两个人都是这样 对象x和y(如果y为真)
List test=newlist这不重要-等式应该是对称的。从以下文件:
Equals方法是自反的,
对称的,可传递的。就是
如果用于比较数据,则返回true
对象本身;两个人都是这样
对象x和y(如果y为真)
和x;对于两个对象x和
z,如果x和y为真,并且
y和z为真
我不相信Enumerable.Contains中的用法定义得很好,也就是说,在未来的版本中可能会发生变化。如果你只是让你的相等比较器遵守接口文档,你会没事的。为了完整起见,IEnumberable的反射代码显示它在左边(见下文)。然而,这并没有保证永远不会改变,所以使用它是有风险的
public static bool Contains<TSource>(this IEnumerable<TSource> source, TSource value, IEqualityComparer<TSource> comparer)
{
if (comparer == null)
{
comparer = EqualityComparer<TSource>.Default;
}
if (source == null)
{
throw Error.ArgumentNull("source");
}
foreach (TSource local in source)
{
if (comparer.Equals(local, value))
{
return true;
}
}
return false;
}
公共静态bool包含(此IEnumerable源、TSource值、IEqualityComparer比较器)
{
if(比较器==null)
{
comparer=EqualityComparer.Default;
}
if(source==null)
{
抛出错误。ArgumentNull(“源”);
}
foreach(源中的TSource本地)
{
if(比较器等于(本地值))
{
返回true;
}
}
返回false;
}
我仍然觉得有趣的是,IComparer不需要是可传递的。。。事实上,这不是字符串
public static bool Contains<TSource>(this IEnumerable<TSource> source, TSource value, IEqualityComparer<TSource> comparer)
{
if (comparer == null)
{
comparer = EqualityComparer<TSource>.Default;
}
if (source == null)
{
throw Error.ArgumentNull("source");
}
foreach (TSource local in source)
{
if (comparer.Equals(local, value))
{
return true;
}
}
return false;
}