使用静态字段时键入Initialization Exception

时间:2010-06-22 09:20:26

标签: c# typeinitializeexception

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TypeIntailization_Exception
{

    class TypeInit
    {
        // Static constructor
        static TypeInit()
        {

        }
        static readonly TypeInit instance = new TypeInit();
        public  static TypeInit Instance
        {
            get { return instance; }
        }
        TypeInit() { }
    }
    class TestTypeInit
    {
        static public void Main()
        {

            TypeInit t = TypeInit.Instance;

        }
    }

}

运行时我得到Type IniTialization Exception如何避免这种情况...

2 个答案:

答案 0 :(得分:3)

类初始化程序抛出异常时抛出TypeInitializationException(在您的示例中为static TypeInit()

您可以通过检查TypeInitializationException的InnerException属性来查看真正的异常:

static public void Main()
{
    try
    {
        TypeInit t = TypeInit.Instance;
    }
    catch (TypeInitializationException tiex)
    {
        var ex = tiex.InnerException;

        Console.WriteLine("Exception from type init: '{0}'", ex.Message);
    }
}

答案 1 :(得分:0)

您在单例类的构造函数中抛出异常,因此在您尝试构造它时,它会抛出异常。如你所见,这会被包装在TypeInitializationException中。

解决方案:除非被警告,否则不要抛出异常。