Выход из метода в C # - PullRequest
2 голосов
/ 31 марта 2009

В C ++, если я хочу выйти из метода, не возвращая ничего, что я могу сделать;

// A completely useless method
static public double function(int a){
  if(a==1){
     cout << "Error !";
     exit(1);
  }
  else
     return (double)a;       
}

Как мне сделать эквивалент в C #?

Ответы [ 9 ]

13 голосов
/ 31 марта 2009

Обычный способ обработки состояния ошибки в .NET - генерировать исключение:

public static double function(int a) {
   if (a == 1) {
      throw new ArgumentException("The value 1 is not accepted.");
   }
   return (double)a;       
}

Исключительная ситуация будет обнаружена кодом, вызывающим метод, или где-то в другом месте. Это зависит от вызывающего кода, чтобы обработать его на соответствующем уровне.

Обычно методы для очистки входных данных таким образом, чтобы любые ошибочные значения обнаруживались раньше, а не вызывали ошибку позже в коде, где намного сложнее отследить.

12 голосов
/ 31 марта 2009

Функция «exit» не просто завершает метод, но и завершает программу.

http://msdn.microsoft.com/en-us/library/k9dcesdd.aspx

В консольных приложениях C # вы можете вызывать System.Environment.Exit ().

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

7 голосов
/ 31 марта 2009

Вы можете выйти из метода, не возвращая ничего, используя оператор return. Но если тип возвращаемого значения отличается от void, вам придется что-то возвращать.

Если вы хотите выйти из метода из-за ошибки, вы должны посмотреть на исключения.

3 голосов
/ 31 марта 2009
0 голосов
/ 31 марта 2009

Другой вариант, учитывающий все предыдущие ответы, и в случае, если вы работаете с Windows Forms, это позвонить

Application.Exit();
0 голосов
/ 31 марта 2009

Ты не. Следуя вашему методу, вы должны будете выполнять тест после каждого вызова вашей функции, чтобы проверить, действительно ли был возвращен double

В вашем примере вы бы сделали что-то вроде ...

public static double myFunc( int a ) {

   if( a==1 ){
       throw new InvalidArgumentException( "a must be greater than one." );
   }

   return (double)a;

}
0 голосов
/ 31 марта 2009

Учитывая контекст того, что вы хотите сделать, это должно быть эквивалентно:

public static double SomeFunction(int a)
{
    if(a==1)
    {
        throw new Exception("Error!");
    }
    else
    {
        return (double)a;
    }
}
0 голосов
/ 31 марта 2009

Это, конечно, было бы странно, но да - вы могли бы позвонить в Environment.Exit. Я бы настоятельно предложил бы вместо этого бросить Исключение. Это дает вам шанс на очистку, и ваш абонент может решить, как обработать ошибку. Если никто не сделает, вы все равно остановите процесс, но несколько более изящно.

0 голосов
/ 31 марта 2009

попробуйте вернуться для выхода из метода без выхода из всей программы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...