[讨论]用foreach遍历集合,但如果该集合为空

ccitt 2005-09-07 01:57:44


如题,例如:

foreach ( int i in intArray )
{
Console.WriteLine(i);
}

上例中 intArray 为一int型数组,如果 intArray 为空(null),
则该段代码会抛出一个异常。所以每次使用 foreach 前都要判断一下集合是否为空,这样很不爽。

其实更为自然,更合情全理的行为应该如果集合为空,则循环一次也不执行,相信实现也是很容易的事。
不知微软为什么要在集合为空时抛出一个异常,这样有什么好处?
请大家发表一下看法,谢
...全文
3716 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
linfengcyl 2005-09-07
  • 打赏
  • 举报
回复
强调一下楼上某兄弟说的:
返回值如果是集合型,一定返回空集合,而非null。
切记切记:)
salmon230 2005-09-07
  • 打赏
  • 举报
回复
学习下下
白掌柜 2005-09-07
  • 打赏
  • 举报
回复
同意上面的.

可以在所有的代码中做一个约定,不可以返回null的集合或数组.
而是返回元素个数为零的集合或数组.如:

int [] array = new int[0];
return array;

而不是直接restu null;
xuyu130 2005-09-07
  • 打赏
  • 举报
回复
设个条件啊
wuyi8808 2005-09-07
  • 打赏
  • 举报
回复
楼上的都已经说得很正确了.

同理, 在写返回值为集合类型的函数时, 如果没值, 尽量不要返回 null, 而是返回空集合(或空字符串), 方便以后的使用, 就是说使用时不用再判断是否 null 了.

ArrayList SomeMethod()
{
// ...
if (NoValue)
{
return new ArrayList();
// return null; // 不要这么做
}
}

string AnotherMethod()
{
// ...
if (NoValue)
{
return string.Empty;
// return null; // 不要这么做
}
}

// 这样, 在使用函数的返回值时, 就不用先判断是否为 null 了:
foreach (char c in AnotherMethod())
{
// ...
}

以上意见, 仅供参考. 呵呵.
zkw 2005-09-07
  • 打赏
  • 举报
回复 1
从面向对象的观点看,我认为楼主的看法是有问题的,集合也是对象,而在利用对象之间,一定要创建对象才是合理的步骤,在这里intArray是个对象,你在利用这个对象之前没有创建该对象(即为null) ,这无论语法、逻辑上都是有问题的,所以我认为根本没有必要考虑在集合内部处理集合为null的情况。
以上均属个人见解
effun 2005-09-07
  • 打赏
  • 举报
回复
在进入循环前对intArray进行检查。
if (intArray != null)
{
foreach(int i in intArray)
Console.WriteLine(i);
}
jinjazz 2005-09-07
  • 打赏
  • 举报
回复
楼主把空集合的概念搞错了,你集合空不空先得保证这个集合存在
henryfan1 2005-09-07
  • 打赏
  • 举报
回复
null可以转成任何引用类型都是合法的,也不会产生错误.所以也无法判断.
niwalker 2005-09-07
  • 打赏
  • 举报
回复
楼上的观点是正确的。在.net中任何对象在使用之前都必须实例化,也就是不能是null。至于是不是在每次foreach是判断是否为null,那是你编写代码的问题。如果你不想每次都作判断,那么给你一个建议就是声明一个集合对象的时候,就是用new来创建一个实例,之后使用这个对象,就不用担心它会抛出null的异常了。问题关键不在ms怎么样,而在于你怎么样,你的明白?:)
humin1906 2005-09-07
  • 打赏
  • 举报
回复
楼上说的是.null和空集合是不一样的.
TechEye 2005-09-07
  • 打赏
  • 举报
回复
null对象和空集合(无元素),这两种情况不同

ArrayList arr = new ArrayList();//空集体无元素
foreach ( object i in arr)
{
//这里没进来
Console.WriteLine(i.ToString());
}

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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