广州微网站建设咨询,印象笔记配置到wordpress,网页设计网站设计哪个好,包头市做网站公司前言在Dotnet开发过程中#xff0c;Any作为IEnumerable的扩展方法#xff0c;十分常用。本文对Any方法的关键源码进行简要分析#xff0c;以方便大家日后更好的使用该方法。使用Any 确定序列中是否包含元素或存在元素满足指定条件。看这样一个例子#xff0c;我们判断集合中… 前言在Dotnet开发过程中Any作为IEnumerable的扩展方法十分常用。本文对Any方法的关键源码进行简要分析以方便大家日后更好的使用该方法。使用Any 确定序列中是否包含元素或存在元素满足指定条件。看这样一个例子我们判断集合中是否存在元素ListUserInforMation lstUserInforMations new ListUserInforMation();
bool flag lstUserInforMations.Any();
flag lstUserInforMations.Any(oo.Sex男);当然flag都为false。我们现在给集合赋值//赋值
lstUserInforMations new ListUserInforMation
{new UserInforMation{UserName张三,Sex男},new UserInforMation{UserName李四,Sex女},
};
flag lstUserInforMations.Any();
flag lstUserInforMations.Any(o o.Sex 男);只要有一个条件满足当然就会返回true了源码解析第一个方法public static bool AnyTSource(this IEnumerableTSource source)参数source 元素的类型返回值bool该方法表示 只要有一个元素存在就返回True,否则返回false。IEnumerable修饰我们的源元素类型那么我们就知道源元素是一个 可以获得循环访问集合的枚举器那么我们就可以使用GetEnumerator这个方法进行迭代了。然后我们在使用MoveNext方法来遍历集合的元素源码:public static bool AnyTSource(this IEnumerableTSource source)
{if (source null){throw null;}using (IEnumeratorTSource enumerator source.GetEnumerator())
{if (enumerator.MoveNext()){eturn true;}}return false;
}第二个方法public static bool AnyTSource(this IEnumerableTSource source, FuncTSource, bool predicate)参数source 元素的类型FuncTSource, bool predicate 该委托用于判断某元素是否满足某个条件这个func委托接收一个和源元素相同的参数类型并返回一个bool返回值bool我们在第一个方法上改进使用foreach遍历源元素如果有一个满足我们就返回true源码:public static bool AnyTSource(this IEnumerableTSource source, FuncTSource, bool predicate){if (source null){throw null;}if (predicate null){throw null;}foreach (TSource item in source){if (predicate(item)){return true;}}return false;
}总结在我们了解了any的源码后我们在判断集合为空的时候是不是使用Any() 比Count() 更好一点了呢欢迎留言讨论