栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

检查列表中的任何项目是否与另一个列表中的任何项目匹配

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

检查列表中的任何项目是否与另一个列表中的任何项目匹配

您可以编写可处理许多情况的通用扩展方法。该功能本身的实质是一行。

/// <summary>/// Compares both lists to see if any item in the enumerable /// equals any item in the other enumerable. /// </summary>public static bool AnyItem<T>(this IEnumerable<T> source, IEnumerable<T> other, IEqualityComparer<T> comparer = null){    return (comparer == null ? source.Intersect(other) : source.Intersect(other, comparer)).Any();}

较旧,效率较低的答案

public static bool AnyItem<T>(this IEnumerable<T> source, IEnumerable<T> other){    return source.Any(s => other.Any(o => EqualityComparer<T>.Default.Equals(s, o)));}

认为 这也比当前答案更有效(不是)。我将不得不检查获取EqualityComparer是否昂贵,但我对此表示怀疑。


您也可以扩展此函数以接受一个表达式,该表达式将评估要比较包含对象的可枚举的哪些属性。

public static bool AnyItem<T, TResult>(        this IEnumerable<T> source,         IEnumerable<T> other,         expression<Func<T, TResult>> compareProperty = null){    if (compareProperty == null)    {        return source.Any(s => other.Any(o => EqualityComparer<T>.Default.Equals(s, o)));    }    return source.Any(s => other.Any(o =>          EqualityComparer<TResult>.Default.Equals(         s.GetPropertyValue(compareProperty),         o.GetPropertyValue(compareProperty))));}public static TValue GetPropertyValue<TTarget, TValue>(    this TTarget target, expression<Func<TTarget, TValue>> memberLamda){    var memberSelectorexpression = memberLamda.Body as Memberexpression;    var property = memberSelectorexpression?.Member as PropertyInfo;    return (TValue)property?.GetValue(target);}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/377964.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号