Введите исключение инициализации при использовании статического поля

StackOverflow https://stackoverflow.com/questions/3091785

  •  29-09-2019
  •  | 
  •  

Вопрос

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;

        }
    }

}

При запуске я получаю исключение интиализации типа, как я могу избежать этого ...

Это было полезно?

Решение

Типинициализированная эксплуатация брошена, когда исключение брошено на инициализатор класса (в вашем примере 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);
    }
}

Другие советы

Вы бросаете исключение в конструктор класса Singleton, поэтому в тот момент, когда вы пытаетесь построить его, это бросает исключение. Это заканчивается в типинициализированииException, как вы видите.

Решение: не бросайте исключение, если только оно не имеет значения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top