MSDNから:
不要なキャストを排除することで、暗黙的な変換によってソース コードの読みやすさが向上します。ただし、暗黙的な変換はプログラマが指定しなくても発生する可能性があるため、不愉快な驚きを避けるために注意する必要があります。一般に、暗黙的な変換演算子は、プログラマーが意識しなくても安全に使用できるように、決して例外をスローしたり、情報を失ったりするべきではありません。変換演算子がこれらの基準を満たさない場合は、明示的とマークする必要があります。
私は特定の点に同意しませんが、これはすべて非常に良いことに同意しますが、暗黙の変換が例外をスローしないという部分を破るのに十分な理由はありますか?
私の前にある特定のケースは、次の場合です。
- カスタム コレクション オブジェクトを返す関数があります (これを と呼びます
FooCollection
)。 - この関数は、単一のアイテムを持つコレクションを返すことができ、これが発生するかどうかはソース コードから判断できます。(これは、関数自体ではなく、関数呼び出しのみを意味します)
- それが起こった場合、ユーザーが 1 つのアイテムのコレクションではなく、その 1 つのアイテムを望んでいる可能性は 99.9% です。
FooCollection
ここで、 =>からの暗黙的な変換を含めて、Foo
この小さな実装の詳細を隠すかどうかを検討していますが、この変換は、コレクションに単一のアイテムがある場合にのみ機能します。
Exception
この場合投げても大丈夫ですか?または、代わりに明示的なキャストを使用する必要がありますか? これに対処する方法について他のアイデアはありますか (いいえ、実装の詳細のため、2 つの関数だけを使用することはできません)。
編集:FooCollection
インターフェイスを実装していないか、名前が示すように実際に拡張していないことに注意する価値があると思いますCollection
。したがって、LINQベースの回答は役に立ちません。また、コレクションは数値インデックスを実装していますが、ほとんどが名前付きインデックスに依存しているため、コレクションを処理する最も直感的な方法ではありません。