Я пытаюсь понять, почему у компилятора есть проблемы с этой функцией. Это дает мне ошибку "Не все коды пути возвращают значение", однако я не вижу ситуации, когда поток управления передается выражению if( a )
без a
, являющегося истинным (поэтому if( a )
является излишним, но компилятор, похоже, не признает этого).
public static Boolean Foo(Boolean x)
{
Boolean a = false;
if( x )
{
a = true;
}
else
{
try
{
SomethingThatMightThrow();
Assert.IsFalse( a );
return a;
}
catch(Exception)
{
a = true;
}
}
if( a )
{
return x;
}
}
Непосредственное исправление заключается в том, чтобы просто удалить оператор if( a )
guard полностью и просто return x
немедленно, но почему компилятор жалуется, хотя он должен иметь возможность статически доказывать, что все возможные пути кода попадут в оператор return
? Существенно, что нет петель, которые часто являются основной причиной того, что он не докажет return
-ness.
Я использую VS2015 Update 3.