多くの場合、null
を返す外部API呼び出しをラップするメソッドがあります。そうなったら、default
の値を返したいと思います。この方法は、この値をジェネリック型にキャストできるかどうかを確認するにはどうすればよいですか?
public static T GetValue<T>(int input)
{
object value = ExternalGetValue(input);
return value != null ? (T)value : default(T)
}
のように見える問題が(T)value
が無効なキャスト例外を投げるかもしれないということです。だから、私は
var value = ExternalGetValue(input) as Nullable<T>;
に変更するだろうと思ったが、これはwhere T : struct
必要であり、私は同様の参照型を許可します。
次に、両方を処理するオーバーロードを追加しようとしました。
public static T GetValue<T>(int input) where T : struct { ... }
public static T GetValue<T>(int input) where T : class { ... }
しかし、制約に基づいてオーバーロードできないことがわかりました。
異なる名前の2つのメソッドを持つことができます。nullable型とnonnullable型の2つのメソッドがあることがわかりましたが、私はむしろそうしません。
as
を使用せずにT
にキャストできるかどうかを確認する良い方法はありますか?または、as
を使用して、すべてのタイプに対応する単一の方法を使用できますか?
方法は、あなたが予想よりも異なるタイプを返す場合、それはおそらく良いことです例外がスローされます。エラーを解決する代わりに、エラーを隠そうとしていないと確信していますか? – svick
@svickこれは良い点です。具体的には、これはユーザーが入力したデータを特定の型にするべきですが、そうでないかもしれません。私は、デフォルト値を与えるのではなく、エラーがあったことをユーザーに知らせるほうがよいでしょう。 –