私はこれを解決するためにSOを掘り出しました。これまで見つかった最良のものはhereですが、これは静的コンストラクタを使用するインスタンスに対応しています。私は静的にクラスを使用しています。静的コンストラクタの例外
マイコード:
public static class MailHelper {
private static string mailHost;
static MailHelper() {
var mailSettings = ConfigurationManager.GetSection("MailSettings") as NameValueCollection;
if (null == mailSettings) {
throw new ConfigurationErrorsException("Missing Mail Settings in the configuration file");
}
mailHost = ConfigurationManager.AppSettings["mailHost"];
if (null == mailHost) {
throw new ConfigurationErrorsException("Missing mailHost setting in the configuration file");
}
}
public static void SendMail(MailMessage Message) {
...
}
}
try {
MailHelper.SendMail(Message);
}
catch (ConfigurationErrorsException exc) {
...
}
// ???
MailHelper.SendMail(Message);
.
静的コンストラクタが例外にそれを呼び出して初めてスローのであれば、どのような私は、静的なのSendMail()メソッドにアクセスしようとする2回目に発生?
PS:StroustrupのバージョンK & Rブレーススタイリングが気に入らないのは残念ですが、あなたの好みのオールマンスタイルにブレースを変更するために投稿を編集しないでください。ありがとう。
これは失敗するはずですが、自分で試してみると何が問題になりますか? –
クラスが不安定な状態(完全に初期化されていない状態)にあるので、(静的な)コンストラクタからスローするのは本当に意味がないと思います。使用前に呼び出す明示的な 'Init()'関数を作成する方法(既に初期化されている場合は何もしないでください)、例外がスローされた場合*クラスを使用しないでください* – Cameron
Pontus> Jonがより多くの点:) –