4

C# でこのようなメソッドをよく見かけます: (結果が得られるかどうかわからない計算を行う)

bool TrySomething(SomeType inputData, out SomeOtherType result) { ... }

なぜ人々は代わりにこのようなものを使わないのですか?

Nullable<SomeOtherType> TrySomething(SomeType inputData) { ... }

性能差だけですか?これは であるstructため、ヒープ割り当ては必要ありませんよね? それとも私は何かを逃したのですか?

4

1 に答える 1

1

Nullableジェネリックと同様に、C# 2.0 で導入されました。それよりも前のコードがたくさんあります。

正直なところ、私は何か問題が発生したNullableときに を返すのが好きではありません。

あなたが通常持っているのは次のような方法です

SomeOtherType Something(SomeType inputData) { ... }

何か問題が発生した場合に例外をスローします。場合によっては、例外を回避したいので、別の方法があります: あなたが与えたものです。

bool TrySomething(SomeType inputData, out SomeOtherType result) { ... }

ただし、例外は何が問題なのか正確であり、ブール値は正確ではありません。したがって、 がfalse表示された場合、「うまくいかなかった」という情報はほとんどありません。場合によっては、それで十分かもしれません。私は、「私のコレクションにはその値が含まれていませんでした」というエラーと、「現在メモリが不足していて、もう何もできません」というエラー、またはその他のものを区別するのが好きです。

as戻り値を紹介すると、それは、私がそう呼んでいるように、受け取るということは「値がnullである」という意味ではなく、「何らかのエラーが発生した」という意味Nullableであることを知っているドルイドの知識です。メソッドの結果は自明ですがnull、それは文書化して説明する必要があるものです。boolTryXXX

要するに、Nullable戻り値として を使用することで、わずかに紛らわしいコードを生成するだけで、何も得られません。

于 2013-07-06T18:51:58.407 に答える