.NET Core 6 类的私有静态变量关联异常

发布时间 2024-01-11 16:31:22作者: zencorn

因为,在.NET Core 6(以及其他.NET版本)中,类的私有静态变量在类第一次被任何方式引用时被初始化。

所以,

1: 在Debug时,如果跟踪某个方法是查看类的私有静态变量被访问前,无法单步跟踪查看这些静态变量的赋值。

2: 如果静态变量的初始化涉及到复杂的计算或者可能抛出异常,那么这个初始化过程会被延迟到静态变量被实际用到的时候,会导致在查看当前静态变量时,由于其它静态变量在后台有调用赋值时抛出的异常,但却与当前调试的静态变量无关。这种情况下,静态构造函数(如果存在)会在静态变量被用到之前调用,用于执行初始化过程。

Sample

public class MyClass
{
private static int myVariable = OtherMethods(); // 方法中可能报错,但没有访问myVariable时没有触发该异常

private static int myRequest = “First Request”;
}

在这个例子中,myVariable将在MyClass第一次被引用时初始化,无论是创建实例、访问静态成员还是其他方式。

如果此时在其他方法中首先访问myVariable ,则可能会触发访问所有静态变量,从而触发 OtherMethods中的异常,但却与当前myVariable无关。

所以最好通过静态类,来实现对需复杂计算赋值的静态变量赋值。

static MyClass()
    {
        myVariable =  OtherMethods();
    }