そうですね、私はこれで完全にばかに見えることを知っていますが、私の脳は今朝ギアを上げていません.
「ダメならこういう例外で返して」って言えるメソッドが欲しいですよね?
たとえば、(そしてこれは機能しません)のようなもの:
static ExType TestException<ExType>(string message) where ExType:Exception
{
Exception ex1 = new Exception();
ExType ex = new Exception(message);
return ex;
}
ここで私を混乱させているのは、ジェネリック型が where句のために例外型になることを知っていることです。ただし、 ExceptionをExTypeに暗黙的にキャストできないため、コードは失敗します。次のように明示的に変換することもできません。
static ExType TestException<ExType>(string message) where ExType:Exception
{
Exception ex1 = new Exception();
ExType ex = (ExType)(new Exception(message));
return ex;
}
それも失敗するので..では、このようなことは可能ですか?私はそれが本当のシンプルになるだろうという強い気持ちを持っていますが、私は古いノギンで厳しい一日を過ごしているので、少し余裕を持ってください:P
アップデート
回答してくれてありがとう、どうやら私は完全な馬鹿ではなかったようです! ;)
OK、VegardとSamは、正しい型をインスタンス化できるところまで私を連れて行ってくれましたが、インスタンス化後にメッセージパラメータが読み取り専用であるため、明らかに行き詰まりました。
マットは彼の反応で頭に釘を打ちました。私はこれをテストしましたが、すべて正常に動作します. コード例は次のとおりです。
static ExType TestException<ExType>(string message) where ExType:Exception, new ()
{
ExType ex = (ExType)Activator.CreateInstance(typeof(ExType), message);
return ex;
}
甘い!:)
みんなありがとう!