@IT/Insider.NET「戻り値の型を動的に変更することは可能ですか?」
id:atsushieno:20050501#p1より、@IT の Insider.NET にこんな話題のツリーがあるようだ。
内容を読んだ限りでは、話題が途中からエラー処理の方法にすり替わってしまっている。
本題に関して言えば、これに対して「例外を用いる」というのは有り得ない解答で、質問者の書いたコードの部分的な内容に依り過ぎていると思う。最初の投稿に出ているメソッドの実装部が空であったならば、例外を用いればよいなんていう解答は1件もつかなかったであろうことが簡単に予想できる。
本題に関する解答、つまり「2つの型の戻り値を持つメソッドの作成」としては「object を用いる」に良く似ているが、Nullable'T のような感じの戻り値クラスを作成するのが個人的には好みかな。
public class F1Result { public bool IsInt32 { get; } public bool IsString { get; } public int AsInt32 { get; } public string AsString { get; } public static explicit operator string(F1Result result); public static explicit operator int(F1Result result); } F1Result myFunction(int value);
int/string であるだけなら bool なプロパティと implicit operator にして ToString() を用いるような実装もとりえるし、IConvertible を実装しちゃおうとか考えたりもする。