Помещенный помещает ValidateRequest = "ложь" к Вашему объявлению представления aspx, но санируют пользовательский входной текст в Вашем коде, для предотвращения некоторых нападений xss.
Как насчет этого?
bool condition() { return false; }
int bar() { return 999; }
void foo(out int x)
{
if (condition()) { x = bar(); return; }
// compiler complains about x not being set yet
throw MyMethodThatAlwaysThrowsAnException("missed something.");
}
Exception MyMethodThatAlwaysThrowsAnException(string message)
{
//this could also be a throw if you really want
// but if you throw here the stack trace will point here
return new Exception(message);
}
Если вы знаете, что исключение будет генерироваться всегда, почему это имеет значение. Просто установите для переменной значение something , чтобы она могла скомпилироваться:
void foo(out int x)
{
if( condition() ) { x = bar(); return; }
x = 0;
MyMethodThatAlwaysThrowsAnException( "missed something." );
}
Невозможно пометить метод таким способом.
Возможно, не имеет значения, но шаблон в ваш пример с использованием параметра out
немного странен. Почему бы вместо этого просто не указать в методе возвращаемый тип?
int Foo()
{
if (condition()) return bar();
MyMethodThatAlwaysThrowsAnException("missed something.");
}
x
- это параметр out , и его необходимо установить перед переходом
Если вы не хотите устанавливать x, почему бы вам просто не использовать вместо этого параметр ref?
void foo(ref int x)
{
if( condition() ) { x = bar(); return; }
// nobody complains about anything
MyMethodThatAlwaysThrowsAnException( "missed something." );
}
Он не отвечает на ваш вопрос, но при использовании параметров out всегда рекомендуется инициализировать их в начале метода. Таким образом, у вас не будет ошибок компилятора:
void foo(out int x)
{
x = 0;
if( condition() ) { x = bar(); return; }
MyMethodThatAlwaysThrowsAnException( "missed something." );
}