Введите исключение инициализации при использовании статического поля
-
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, как вы видите.
Решение: не бросайте исключение, если только оно не имеет значения.
Не связан с StackOverflow