放置静态构造函数时不能使用静态类

时间:2018-02-14 22:47:17

标签: c# static-constructor

我有以下静态类:

public static class UnitTestDefinitions
{
    public static int Foo = 4;

    /// <summary>
    ///     static constructor
    /// </summary>
    static UnitTestDefinitions()
    {
        InitAccounts();
    }

     private static void InitAccounts()
     {
         // some code
     }

     // more code
 }

我的NUnit测试无法运行,因为我无法访问Foo

enter image description here

我得到的实际例外是:

  

System.TypeInitializationException未被用户代码
处理   HResult = -2146233036 Message =类型初始值设定项   'Ublux.Communications.PrimaryService.UnitTestDefinitions'扔了一个   例外。来源= Ublux.Communications.CoreService
  类型名= Ublux.Communications.PrimaryService.UnitTestDefinitions
  堆栈跟踪:          在Ublux.Communications.CoreService.UnitTests.TestCloudServicesCore.TestAuthentication()   在C:\ GIT \ Ublux \ Ublux通信核心   服务\ Ublux.Communications.CoreService \ Ublux.Communications.CoreService \单元测试\ TestCloudServices_Core.cs:行   146 InnerException:          的HResult = -2146233040          Message =抛出类型'System.Threading.ThreadAbortException'的异常。

我一直在使用c#,所以对我来说很明显问题必须在静态构造函数中,换句话说,方法InitAccounts()必须存在问题。

因此我在静态类UnitTestDefinitions上删除静态构造函数并手动调用InitAccounts()方法:

enter image description here

当我这样做时,我没有例外,一切都很好吗?

1 个答案:

答案 0 :(得分:0)

用户无法控制程序中何时执行静态构造函数。如果您的InitAccounts()方法试图访问尚未初始化的对象,则可能会出现异常。由于您尚未提供该代码,因此很难说。这是完全避免静态类的一个重要原因(必要时使用Singleton)。