2012-04-09 54 views
0

比方说,我有一个对象列表TheListOfObjects。当收集计数小于参数时采取(参数)

如果我这样写:

TheListOfObjects = TheListOfObjects.Take(40).ToList(); 

它会不会崩溃,如果在列表中只有30个项目还是会只返回前30?并且当TheListOfObjects是空的,甚至空?

谢谢。

+12

这应该是测试一个非常简单的事情。 'var foo =(new [] {1,2})。Take(10);' – drch 2012-04-09 13:40:18

+0

LinqPad在这些情况下是你的朋友... – benPearce 2017-05-03 04:59:40

回答

14

这是那些你应该只是尝试,或至少检查documentation之一。

如果列表中只有30个项目,或者它只是返回前30个项目,它会崩溃吗?

它只是将返回第30

当TheListOfObjects是空

它将返回空序列。

甚至为空?

这将导致ArgumentNullException

从MSDN:

Take<TSource>枚举源并产生元素,直到计数元件已经产生或源不包含更多的元素。

如果count小于或等于零,则source未被枚举且返回空的IEnumerable<TSource>

而下的例外:

Exception    Condition 
ArgumentNullException source is null 

在你花了登录到StackOverflow上的时候,你可能会要么检查MSDN和有一个权威解答(请注意,某些轻度不正确或部分不完整的答案已经在这里发布和删除)或者启动Visual Studio并且润滑一下你的轮子。

+0

所以你说,但文档有时会忽略这些信息,所以感觉像是浪费当我可以在StackOverflow上搜索并找到答案时,可以尝试使用文档。这个答案帮助了我,我认为这个问题很有用。 – 2016-12-28 08:04:22

3

MSDN说:

采取(中TSource)列举源,并产生元素,直到计数元素已经取得或源包含没有更多的元素。

3

msdn来自:

Take<T>枚举源并产生元素,直到计数 元件已经产生或源不包含更多的元素。

如果计数小于或等于零,则不会枚举源,并返回为空的IEnumerable<T>

+0

+1发布有趣的第二句话 - 我现在赶紧用一个'Count'属性创建一个集合类型,它返回一个负值! – phoog 2012-04-09 15:04:11

0

试试这个

TheListOfObjects = TheListOfObjects.Take(TheListOfObjects.Count > 30 ? 30 : TheListOfObjects.Count).ToList();