放置静态构造函数时不能使用 static class
Cannot use static class when placing a static constructor
我有以下静态 class:
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
:
我得到的实际异常是:
System.TypeInitializationException was unhandled by user code
HResult=-2146233036 Message=The type initializer for
'Ublux.Communications.PrimaryService.UnitTestDefinitions' threw an
exception. Source=Ublux.Communications.CoreService
TypeName=Ublux.Communications.PrimaryService.UnitTestDefinitions
StackTrace:
at Ublux.Communications.CoreService.UnitTests.TestCloudServicesCore.TestAuthentication()
in C:\GIT\Ublux\Ublux Communications Core
Service\Ublux.Communications.CoreService\Ublux.Communications.CoreService\UnitTests\TestCloudServices_Core.cs:line
146 InnerException:
HResult=-2146233040
Message=Exception of type 'System.Threading.ThreadAbortException' was thrown.
我使用 c# 有一段时间了,所以对我来说很明显问题出在静态构造函数中,换句话说,方法一定有问题 InitAccounts()
.
因此,我删除了静态 class UnitTestDefinitions 上的静态构造函数并手动调用 InitAccounts()
方法:
当我这样做时,我没有例外,一切都很好,为什么?
用户无法控制何时在程序中执行静态构造函数。如果您的 InitAccounts()
方法试图访问尚未初始化的对象,您可能会遇到异常。由于您尚未提供该代码,因此很难说。这是完全避免 static 类 的一个重要原因(必要时使用 Singleton)。
我有以下静态 class:
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
:
我得到的实际异常是:
System.TypeInitializationException was unhandled by user code
HResult=-2146233036 Message=The type initializer for 'Ublux.Communications.PrimaryService.UnitTestDefinitions' threw an exception. Source=Ublux.Communications.CoreService
TypeName=Ublux.Communications.PrimaryService.UnitTestDefinitions
StackTrace: at Ublux.Communications.CoreService.UnitTests.TestCloudServicesCore.TestAuthentication() in C:\GIT\Ublux\Ublux Communications Core Service\Ublux.Communications.CoreService\Ublux.Communications.CoreService\UnitTests\TestCloudServices_Core.cs:line 146 InnerException: HResult=-2146233040 Message=Exception of type 'System.Threading.ThreadAbortException' was thrown.
我使用 c# 有一段时间了,所以对我来说很明显问题出在静态构造函数中,换句话说,方法一定有问题 InitAccounts()
.
因此,我删除了静态 class UnitTestDefinitions 上的静态构造函数并手动调用 InitAccounts()
方法:
当我这样做时,我没有例外,一切都很好,为什么?
用户无法控制何时在程序中执行静态构造函数。如果您的 InitAccounts()
方法试图访问尚未初始化的对象,您可能会遇到异常。由于您尚未提供该代码,因此很难说。这是完全避免 static 类 的一个重要原因(必要时使用 Singleton)。