1

我想知道是否有办法克服这种情况:

我有一个带有静态变量的静态类,比如说

static string[] Cities = GetCities();

GetCities从一个数据库中获取所有城市。问题是我收到一个错误,GetCities因为数据服务器有时不可用,即使服务器再次可用,这个错误也不会消失。
我认为这是因为变量 Cities 只创建一次......

4

3 回答 3

4

我认为这是因为变量 Cities 仅创建一次

这是正确的:只有一次调用GetCities(); 如果失败,将不会有其他调用。要解决此问题,请更改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

静态初始化每个类只发生一次。当静态初始化期间发生异常时,CLR 会存储该异常。该类的未来使用将自动重新抛出相同的异常,而不是触发任何重新初始化。您无法更改此行为。

于 2013-06-26T16:28:05.180 回答