【问题标题】:Type initializer exception - C#类型初始化程序异常 - C#
【发布时间】:2009-02-11 06:02:23
【问题描述】:
namespace X{  public static class URLs
{
    public static TabController tabIdLookUp = new TabController();
    public static string DASHBOARD_AUDIT_PAGE = tabIdLookUp.GetTabByName("View My Safety", 2).TabID.ToString();
    public static string URL_GENERATE_WITH_MID(String TabName, int PortalId){        {
        return tabIdLookUp.GetTabByName(TabName, PortalId).TabID.ToString();
    }
}}

... 在我的用户控件中,我这样做:

Response.Redirect("/" + X.URLs.URL_GENERATE_WITH_MID("test", 1)); // this causes the error

错误是:“X.URLs”的类型初始化程序引发了异常。 ---> System.NullReferenceException:对象引用未设置为对象的实例。在 X.URLs..cctor()

无法调试,因为它可以在我的本地机器上运行,但会在服务器上引发该错误。

有什么想法吗?

附:问题最终变成了一个微不足道的 NUllReferenceException - GetTabByName() 正在返回 NULL

【问题讨论】:

  • 您是否记录了异常?内部异常呢?我遇到了完全相同的错误,这是毫无价值的。幸运的是,我也在使用递归并记录内部异常。

标签: c# asp.net .net-2.0


【解决方案1】:

与其让“DASHBOARD AUDIT PAGE”的初始化程序直接引用 tabIdLookUp,为什么不在静态构造函数中初始化这两个变量,看看是否能修复错误?

namespace X{  public static class URLs
{
    public static TabController tabIdLookUp;
    public static string DASHBOARD_AUDIT_PAGE;
    public static string URL_GENERATE_WITH_MID(String TabName, int PortalId){        {
        return tabIdLookUp.GetTabByName(TabName, PortalId).TabID.ToString();
    }

    static URLs() {
        tabIdLookUp = new TabController();
        DASHBOARD_AUDIT_PAGE = tabIdLookUp.GetTabByName("View My Safety", 2).TabID.ToString();
    }
}}

您可能遇到的另一个问题是,如果 GetTabByName 返回一个 NULL 引用,那么您并没有对此进行保护,而只是引用了 .TabID 属性。您可能应该确保在引用该属性之前获得有效的引用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 2010-11-16
    • 1970-01-01
    • 2012-09-07
    相关资源
    最近更新 更多