Код: Выделить всё
public static class Logger
{
public static void Add(LogLevels level, string message)
{
//...
}
public static void Add(Exception exception)
{
Add(LogLevels.Fatal, exception.Message);
Add(LogLevels.Fatal, exception.StackTrace);
throw exception;
}
}
Код: Выделить всё
public static ICad Instance
{
get
{
if (_instance == null)
{
Logger.Add(new NullReferenceException("CAD Connector instance requested before running creation procedure"));
}
return _instance;
}
}
Код: Выделить всё
public static ICad Instance
{
get
{
if (_instance == null)
{
var ex = new NullReferenceException("CAD Connector instance requested before running creation procedure")
Logger.Add(LogLevels.Fatal, ex.Message);
Logger.Add(LogLevels.Fatal, ex.StackTrace);
throw ex;
}
return _instance;
}
}
Однако проблема в том, что компилятор не осознает, что исключение передано будет создан Logger.Add, поэтому в этом примере отображается предупреждение о возможном возврате нулевой ссылки при возврате _instance. Его можно подавить с помощью return _instance!;, но подобные проблемы продолжают возникать и в других местах, где я использую Logger.Add вместо того, чтобы напрямую генерировать исключение, иногда до такой степени, что оно выигрывает. невозможно даже компилировать (например, в операторах switch), что требует грязных хаков и подавления предупреждений.
Эти проблемы можно обойти, но мне кажется, что я делаю это Неправильный путь. Может ли кто-нибудь посоветовать, есть ли для этого чистое решение, которое не требует подавления предупреждений компилятора, но также позволит мне создавать исключения с минимальным кодом, как в моем текущем решении?
Подробнее здесь: https://stackoverflow.com/questions/793 ... hrowing-it
Мобильная версия