gpt4 book ai didi

c# - 类型初始化器(静态构造器)异常处理

转载 作者:可可西里 更新时间:2023-11-01 08:46:33 25 4
gpt4 key购买 nike

我正在用 C# 编写 WCF 服务。最初我的实现有一个静态构造函数来做一些一次性初始化,但是一些正在进行的初始化可能(暂时)失败。

似乎静态构造函数只被调用一次,即使第一次(失败的)尝试抛出异常?任何后续实例化我的类的尝试都将立即失败并返回 TypeInitializationException,而代码并未实际执行。

C# 语言规范声明静态构造函数最多调用一次,但基本上这会产生一个异常,即使您捕获到它也无法从中恢复?

我是不是漏掉了什么?我想我应该将任何远程危险移动到服务的实例构造函数并手动检查类初始化是否已经成功完成?

最佳答案

所以你可以将关键部分包装在 try/catch 中,至少这意味着类型不会初始化失败,但如果初始化代码是那么关键,那么这种行为实际上是好的——类型不可用处于这种未初始化状态。

另一种选择是将其作为单例执行 - 每次尝试获取实例时,您都可以正确创建类型,直到成功为止,即使第一次失败也是如此。

如果 Instance 第一次(或第二次等)返回 null,您仍然需要对调用者进行一些错误处理。

编辑:如果你不想要单例,那么只需让你的实例构造函数初始化静态部分

例如

private object _lock = new object()
private bool _initialized;

public T()
{
lock(_lock)
{
if(!_initialized)
{
try
{
//Do static stuff here
}
catch(Exception ex_)
{
//Handle exception
}
}
}
}

关于c# - 类型初始化器(静态构造器)异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1328465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com