2012-07-31 133 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可能是一個更明智的返回值。

相關問題