@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 を実装しちゃおうとか考えたりもする。