判等 集合是否存在某个元素?

claymore1114 2010-11-10 03:55:02
哪种方法好呢?大家 都怎么判等的

//是否存在 某个元素
List<int> list = Enumerable.Range(1, 10000).ToList();

var dd = list.FirstOrDefault(s => s == 900000);
// Any Contains FirstOrDefault 等其他方法
Func<List<int>, int, bool> AnyContains = (l, t) =>
{
return l.Any(s => s == t);

};
Func<List<int>, int, bool> Contains = (l, t) =>
{
return l.Contains(t);
};
Func<List<int>, int, bool> FirstContains = (l, t) =>
{
return l.FirstOrDefault(s => s == t) != 0; //引用类型null
};
//测试5000
Console.WriteLine(AnyContains(list, 5000));
Console.WriteLine(Contains(list, 5000));
Console.WriteLine(FirstContains(list, 5000));

下面是三个方法的源码

public static bool Any<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)
{
if (source == null)
{
throw Error.ArgumentNull("source");
}
if (predicate == null)
{
throw Error.ArgumentNull("predicate");
}
foreach (TSource local in source)
{
if (predicate(local))
{
return true;
}
}
return false;
}
public static bool Contains<TSource>(this IEnumerable<TSource> source, TSource value)
{
ICollection<TSource> is2 = source as ICollection<TSource>;
if (is2 != null)
{
return is2.Contains(value);
}
return source.Contains<TSource>(value, null);
}
public static TSource FirstOrDefault<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)
{
if (source == null)
{
throw Error.ArgumentNull("source");
}
if (predicate == null)
{
throw Error.ArgumentNull("predicate");
}
foreach (TSource local in source)
{
if (predicate(local))
{
return local;
}
}
return default(TSource);
}

大家 也可以用自己写 for循环,哪个方法好点?
...全文
149 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
claymore1114 2010-11-10
  • 打赏
  • 举报
回复
感觉 Contains 性能应该是最好的。
claymore1114 2010-11-10
  • 打赏
  • 举报
回复
any,Contains 直接返回true/false,
FirstOrDefault返回对象,外面还要判等,为什么要用FirstOrDefault呢?
damjmk2 2010-11-10
  • 打赏
  • 举报
回复
感觉都差不多...
fellowcheng 2010-11-10
  • 打赏
  • 举报
回复
应该差不多吧,都要遍历
claymore1114 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 q107770540 的回复:]

C# code

/*
True
False
*/
[/Quote]
哪个性能 好点,源码 也没看太懂,看到 好多开源代码中喜欢,用FirstOrDefault,为什么呢?
q107770540 2010-11-10
  • 打赏
  • 举报
回复

/*
True
False
*/
q107770540 2010-11-10
  • 打赏
  • 举报
回复

//条条道路通罗马吧
//一般使用Any方法就可以
void Main()
{

List<int> list = Enumerable.Range(1, 100).ToList();
Console.WriteLine(list.Any(l=>l==3));

Console.WriteLine(list.Any(l=>l==300));

}

claymore1114 2010-11-10
  • 打赏
  • 举报
回复
我看到 好多高手喜欢
l.FirstOrDefault(s => s == t) != 0;
l.FirstOrDefault(s => s == t) != null;

我看 Contains 蛮好的啊

8,494

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧