从其他 class 使用 GetEnumerator 时如何处理 foreach 空异常?
How to handle foreach null exception when using GetEnumerator from other class?
我有两个 Classes A 和 B 实现了 IEnumerable
。
A 使用 B.
中的 GetEnumerator
B 是 Class A 的成员。
但是成员B可能为空,所以我添加了空检查。
问题在代码示例的注释中也有说明。应该在另一个分支中放置什么来停止 foreach 空异常?
在下面的例子中:
rootNode
是 B.
图示的函数是A.
的函数
B 是 A 的成员。
public IEnumerator<BVHNode<BoundingVolumeClass>> GetEnumerator()
{
if (rootNode != null)
{
return rootNode.GetEnumerator();
}
else
{
return null;
//return null cause foreach null exception
//what can be put here to stop it?
}
}
不要 return null
但使用 空集合 :
public IEnumerator<BVHNode<BoundingVolumeClass>> GetEnumerator()
{
return rootNode == null
? Enumerable.Empty<BVHNode<BoundingVolumeClass>>().GetEnumerator()
: rootNode.GetEnumerator();
}
我有两个 Classes A 和 B 实现了 IEnumerable
。
A 使用 B.
中的 GetEnumerator
B 是 Class A 的成员。
但是成员B可能为空,所以我添加了空检查。
问题在代码示例的注释中也有说明。应该在另一个分支中放置什么来停止 foreach 空异常?
在下面的例子中:
rootNode
是 B.
图示的函数是A.
的函数
B 是 A 的成员。
public IEnumerator<BVHNode<BoundingVolumeClass>> GetEnumerator()
{
if (rootNode != null)
{
return rootNode.GetEnumerator();
}
else
{
return null;
//return null cause foreach null exception
//what can be put here to stop it?
}
}
不要 return null
但使用 空集合 :
public IEnumerator<BVHNode<BoundingVolumeClass>> GetEnumerator()
{
return rootNode == null
? Enumerable.Empty<BVHNode<BoundingVolumeClass>>().GetEnumerator()
: rootNode.GetEnumerator();
}