То, как отметить метод, бросит безусловно?

Помещенный помещает ValidateRequest = "ложь" к Вашему объявлению представления aspx, но санируют пользовательский входной текст в Вашем коде, для предотвращения некоторых нападений xss.

10
задан H.B. 12 December 2011 в 08:43
поделиться

6 ответов

Как насчет этого?

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);
}
19
ответ дан 3 December 2019 в 15:52
поделиться

Если вы знаете, что исключение будет генерироваться всегда, почему это имеет значение. Просто установите для переменной значение something , чтобы она могла скомпилироваться:

void foo(out int x)
{
  if( condition() ) { x = bar(); return; }

  x = 0;

  MyMethodThatAlwaysThrowsAnException( "missed something." );
}
2
ответ дан 3 December 2019 в 15:52
поделиться

Невозможно пометить метод таким способом.

Возможно, не имеет значения, но шаблон в ваш пример с использованием параметра out немного странен. Почему бы вместо этого просто не указать в методе возвращаемый тип?

int Foo()
{
    if (condition()) return bar();

    MyMethodThatAlwaysThrowsAnException("missed something.");
}
2
ответ дан 3 December 2019 в 15:52
поделиться

x - это параметр out , и его необходимо установить перед переходом

1
ответ дан 3 December 2019 в 15:52
поделиться

Если вы не хотите устанавливать x, почему бы вам просто не использовать вместо этого параметр ref?

void foo(ref int x)
{
  if( condition() ) { x = bar(); return; }

  // nobody complains about anything

  MyMethodThatAlwaysThrowsAnException( "missed something." );
}
1
ответ дан 3 December 2019 в 15:52
поделиться

Он не отвечает на ваш вопрос, но при использовании параметров out всегда рекомендуется инициализировать их в начале метода. Таким образом, у вас не будет ошибок компилятора:

void foo(out int x)
{
    x = 0;
    if( condition() ) { x = bar(); return; }
    MyMethodThatAlwaysThrowsAnException( "missed something." );
}
0
ответ дан 3 December 2019 в 15:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: