2

数値関数を指定して作成する場合、null を返すタイミングと NaN を返すタイミング (どちらも有効な出力と思われる場合) に関する C# 慣用的なガイドラインがあります。

この質問につながった具体的な例は、Enumerable コレクションのパーセンテージ拡張メソッドを作成していることです。空の入力があった場合に何を返すかを考えていました。関数は runningCount / totalCount を返し、長さゼロの入力で NaN を返す可能性があります。しかし、これがこの言語の一般的な感覚にうまく合っているとは思えません。

NaN または null を返すかどうかの決定を通知できるガイドラインまたは言語の例はありますか。

4

2 に答える 2

2

慣用的な C# コードは、意味をなさないことを要求されると、例外をスローします。空の入力でパーセンテージを計算するようなものです。これは InvalidOperationException である必要があります。

null や NaN などの魔法の値を返すと、クライアント コードがそれをチェックしないと、より多くの問題が発生する傾向があります。入力が空であることもチェックしなかったため、それらは期待されません。Null は、それが生成する説明のつかない NullReferenceException にとって厄介であり、実際の問題が何であるかについてのヒントを与えません。NaN は、検出できないほど伝播し、すべてを NaN に変換し、最終的にはソースをたどることができないナンセンスな結果を生成するという点で厄介です。

于 2012-07-31T10:05:33.040 に答える
1

拡張メソッドがどのように使用されるかを調べたいと思うかもしれません。NaNは完全に有効なdouble値であるため、 を使用して計算を実行できます (これらの結果は常に になりますNaNが、少なくとも例外は発生しません)。とにかく使用する前に結果を確認する必要がある場合は、 を選択することをお勧めしますnull

ただし、空のコレクションのパーセンテージ (まだ項目がない場合に発生する可能性があります)について、Andre が既にコメントした0ことは、より賢明な戻り値である可能性があります。

于 2012-07-31T09:49:39.883 に答える