Использование переменной, которой может быть не присвоено значение в блоке finally
Это весь код функции. Может кто-нибудь мне объяснить, при каких, гипотетически, условиях переменной response может быть не присвоено значение?
Или же это просто причуды vs?
string method = ExtractMethod(context.Request.RawUrl ?? string.Empty);
IHandlerFactory handlerFactory = GetHandlerFactory(method);
IHandler handler;
Response response;
try
{
handler = handlerFactory.Create(context);
response = handler.ProcessRequest();
}
catch (Exception e)
{
Logger.Log(LogSeverity.Error, nameof(HttpHandler), "Error", e);
response = new()
{
Exception = CoreException.UnknownException
};
}
finally
{
JsonSerializer.Serialize(context.Response.OutputStream, response);
context.Response.OutputStream.Close();
}
Ответы (1 шт):
Автор решения: tym32167
→ Ссылка
Если у вас в блоке try и catch вылетают исключения, то finally все равно выполнится. Чтобы было понятно что делать с response в этом случае, положите туда сразу что нибудь, хотя бы просто Response response = null;
Пример
try
{
throw new Exception("oops");
}
catch (Exception ex)
{
throw new Exception("oops again");
}
finally
{
Console.WriteLine("Im finally block!");
}
Результат

