繁体   English   中英

如何为 IEnumerable 实现不同的比较<t></t>

[英]How to implement different comparison for IEnumerable<T>

目前,我这样比较(从这里)

bool foo<T>(T expected, T actual) {
    return EqualityComparer<T>.Default.Equals(expected, actual);
}

它适用于基本类型,但不适用于IEnumerable<T> 我怎样才能使它适用于像SequenceEqual这样的IEnumerable<T>

虽然没有什么可以阻止您直接调用SequenceEquals ,但您当然可以将该调用包装在辅助方法中。 请注意, SequenceEquals将逐个索引进行比较。 如果要覆盖比较的处理方式,还可以将IEqualityComparer<T>实例传递给它。

bool foo<T>(IEnumerable<T> expected, IEnumerable<T> actual)
{
    return expected.SequenceEqual(actual);
}

bool foo<T>(IEnumerable<T> expected, IEnumerable<T> actual, 
    IEqualityComparer<T> comparer)
{
    return expected.SequenceEqual(actual, comparer);
}

使用以下内容进行测试按预期返回 true:

IEnumerable<int> expected = new List<int> { 1, 2, 3 };
IEnumerable<int> actual = new List<int> { 1, 2, 3 };

Console.WriteLine(foo(expected, actual));

并为以下内容返回 false:

IEnumerable<int> expected = new List<int> { 1, 2, 3 };
IEnumerable<int> actual = new List<int> { 1, 3, 2 };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM