1

この状況を克服する方法があるかどうか疑問に思っています:

let's sayと呼ばれる静的変数を持つ静的クラスがあります

static string[] Cities = GetCities();

データベースGetCitiesからすべての都市を取得します。問題はGetCities、データ サーバーが使用できない場合があるため、エラーが発生することです。このエラーは、サーバーが再び使用可能になっても消えません。
これは、変数 Cities が一度しか作成されないためだと思います...

4

3 に答える 3

4

これは、変数 Cities が一度しか作成されていないためだと思います

これは正しいですGetCities()。;の呼び出しは 1 回だけです。失敗した場合、他の呼び出しはありません。この問題を解決するCitiesには、読み取り専用プロパティに変更し、結果をGetCities()取得したときに結果をキャッシュします。

static string[] cachedCities = null;
public static string[] Cities {
    get {
        return cachedCities ?? (cachedCities = GetCities());
    }
}
于 2013-06-26T16:28:19.743 に答える
1

型の初期化中にデータベースにアクセスするべきではありません。

代わりに、データベース クエリにキャッシュ メカニズムを導入することを検討してください。

于 2013-06-26T16:29:03.327 に答える
0

静的初期化は、クラスごとに 1 回だけ発生します。静的初期化中に例外が発生すると、CLR は例外を格納します。そのクラスを今後使用すると、再初期化がトリガーされるのではなく、同じ例外が自動的に再スローされます。この動作は変更できません。

于 2013-06-26T16:28:05.180 に答える