Исключение инициализации типа при использовании статического поля - PullRequest
1 голос
/ 22 июня 2010
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 InTialization, как я могу избежать этого ...

Ответы [ 2 ]

3 голосов
/ 22 июня 2010

Исключение TypeInitializationException генерируется, когда инициализатор класса создает исключение (в вашем примере static TypeInit().

Вы можете увидеть настоящее исключение, изучив свойство InnerException исключительной ситуации TypeInitializationException:

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);
    }
}
0 голосов
/ 22 июня 2010

Вы вызываете исключение в конструкторе вашего синглтон-класса, поэтому в тот момент, когда вы пытаетесь создать его, оно вызывает исключение. Это будет включено в TypeInitializationException, как вы видите.

Решение: не создавайте исключение, если оно не гарантировано.

...