нет там нет. Частично причина в том, что практически любой метод может вызвать исключение. Это должно было бы выдать предупреждение почти для каждого метода, так как практически любой метод может вызвать следующее
StackOverflowException
OutOfMemoryException
Добавьте к этому гораздо более вероятный NullReferenceException
, и, по сути, каждый метод будет помечен как "Can throw"
Было бы разумно создать функцию, которая помечает явные исключения. VS не имеет этой функции, но R # (IIRC). Однако даже это не является надежным, потому что вы не можете видеть сквозь интерфейсы.
interface IExample {
void Method();
}
class Class1 : IExample() {
void Method() { throw new Exception(); }
}
class Class2 : IExample() {
void Method() {}
}
...
IExample v1 = ...;
v1.Method();
В этом же методе может или не может бросить. Во всех случаях статический анализ во всех случаях не может быть окончательно определен.