【问题标题】:Type initializer exception in c#c#中的类型初始化异常
【发布时间】:2014-03-31 19:24:55
【问题描述】:

我有一个类库,其中包含具有少量属性的静态类 Utils。

我将 Utils 类中的属性之一调用到我的控制台应用程序中,但出现此错误。 这是 Utils 类的一个小示例。

public static class Utils
{
    public static int CurrentEmpId = -1;
    public static int CurrentUserId
    {
        get
        {
            if (HttpContext.Current != null)
            {
                 if(HttpContext.Current.Session["CurrentUserId"] == null)
                 {
                     HttpContext.Current.Session["CurrentUserId"] = GetCurrentUser();
                     return Int32.Parse(HttpContext.Current.Session["CurrentUserId"]);
                 }
                 else
                 {
                     return Int32.Parse(HttpContext.Current.Session["CurrentUserId"]);
                 }
            }

            return -1;
        }
    }
    //this is making call to a static Method in a static Class called _
    public static string RowHeader = _.T("Some Header");
}

当我尝试在我的控制台应用程序中获取 CurrentUserId 属性时,我得到了异常。我注释掉了公共静态字符串 RowHeader = _.T("Some Header");代码和异常消失了。在任何一种情况下,我都没有编译器或构建错误。

以“_”命名的类就是这个类,做了一些修改:Translation Class

我的问题是为什么 CurrentUserId 属性会因为 RowHeader 而引发异常?

【问题讨论】:

  • 您能否提供充分的理由说明您的问题与相关stackoverflow.com/questions/1226188/… 等许多类似问题不重复? (如果静态构造函数/归档初始化程序抛出比整个类型初始化失败)
  • 您的“少量修改”可能会引起您的兴趣...
  • @Dunken 修改是类的名称更改,它已更改为静态。不知道为什么会导致崩溃。

标签: c# .net gettext


【解决方案1】:

要回答您的问题,可以在第一个类引用发生时评估所有静态成员。 (这是一种轻描淡写和过度简化)它取决于 .NET 版本、静态构造函数的存在、惰性变量等,但在这种情况下,您可能会遇到问题,其中对成员的第一次引用也会初始化其他成员和其中之一会导致异常。

对于错误,检查类型初始化程序异常的 InnerException 属性以获取确切错误的详细信息。这是错误的最佳指示。

【讨论】:

  • 感谢您的解释,这是我正在寻找的答案。
【解决方案2】:

先尝试设置_.ResourceCulture

【讨论】:

  • 感谢您的回复,这在尝试解决导致异常的问题时可能会有所帮助。必须检查一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-07
  • 2012-07-07
  • 2013-04-03
  • 2012-02-01
相关资源
最近更新 更多