2012-07-31 113 views
2

当指定和创建数值函数时,有什么C#惯用指南指示什么时候返回null以及何时返回NaN,当两个输出都是有效的时候。Idiomatic C#:什么时候返回null以及何时返回NaN

导致此问题的具体示例是我为Enumerable集合创建了百分比扩展方法。如果有空输入,我一直在考虑返回什么。该函数可以返回runningCount/totalCount,它将在零长度输入中返回NaN。但是,我不相信这与语言的普遍感觉一致。

是否有任何指导方针或语言示例可以通知决定是否重新纳NaN或null。

+3

IMO:做数学。如果结果为0,则返回0.如果不可能,则抛出异常。 – 2012-07-31 09:48:33

+0

在上面的例子中,它不会返回0或异常。我会争辩说,在0大小集合内的兼容项目的百分比绝对不是0。 – AlexC 2012-07-31 09:55:23

回答

2

当被要求做一些没有意义的事情时,习惯用C#代码会抛出异常。就像计算空输入的百分比一样。这应该是一个InvalidOperationException。

当客户端代码不检查它时,返回像null或NaN这样的魔术值往往会引起更多麻烦。它不会,它也没有检查输入是空的,所以它不会期望它们。 Null对于它产生的不伦不类的NullReferenceException是令人讨厌的,它并没有暗示真正的问题可能是什么。 NaN对于不可察觉地传播而言是讨厌的,将所有东西都变成了NaN,并最终产生无意义的结果,从而无法追溯到源头。

1

你可能想看看你的扩展方法可能被使用的方式。 NaN是一个完全有效的double值,因此可以用来执行计算(嗯,那些结果总是NaN,但至少你不会得到一个例外)。如果您的上下文无论如何需要检查结果,那么您可能需要选择null

然而,什么安德烈已经评论,对于空集的百分比(这可能会导致如果没有项目0可能是一个更明智的返回值。

相关问题