Указание, что функция не возвращается в C # - PullRequest
0 голосов
/ 06 октября 2011

Есть ли способ сообщить компилятору C #, что функция никогда не возвращается?Я сталкиваюсь со следующей проблемой.Это упрощенная версия.

public int myMethod()
{
    try
    {
        return anythingHere();
    }
    catch
    {
        Environment.Exit(1); //or a function which always either calls Environment.Exit or throws an exception
    }
}

'package.class.myMethod ()' не все пути кода возвращают значение.

Если нет, существует ли общий способсоздавать такие вещи, кроме вставки недоступного кода?«Возврат 0» или что-то такое после выхода просто кажется мне смешным.Насколько я знаю, функция не может быть возвращена из вызова Environment.Exit, поэтому возвращаемое значение не требуется, если эта ветвь берется (если возникло исключение, функция все равно не должна была бы возвращать значение).

РЕДАКТИРОВАТЬ:

Может быть, что-то вроде этого?

public T MyExit<T>()
{
    Environment.Exit(1);
    return default(T);
}

Все еще не вполне удовлетворительным, хотя.

Ответы [ 5 ]

3 голосов
/ 06 октября 2011
2 голосов
/ 06 октября 2011

Сделайте метод недействительным и передайте объект, который содержит тип информации 'everythingHere', который вам нужен, как тип out, чтобы его можно было установить, но сам метод на самом деле ничего не возвращает.

public void myMethod(out anythingObject)
{
    try
    {
        anything = new anythingObject(stuff goes here); 
    }
    catch
    {
        Environment.Exit(1); //or a function which always either calls Environment.Exit or throws an exception
    }
}
1 голос
/ 06 октября 2011

Я не уверен, что это то, что вы ищете, но это позволит избежать недоступности кода:

public int myMethod()
{
  int retVal = 0;
  try {
    retVal = anythingHere();
  } catch {
    Environment.Exit(1);
  }
  return retVal;
}
1 голос
/ 06 октября 2011

Может быть, лучше вызвать исключение, чем вызывать Environment.Exit.Если бы кто-то еще использовал ваш класс, и их процесс внезапно прекратился, они были бы очень удивлены.Вызывая исключение, вы можете хотя бы объяснить, почему возникла проблема.

В точке входа верхнего уровня вашего приложения (например, Main) вы можете настроить глобальный обработчик исключений (AppDomain.UnhandledException), который обрабатывает все исключения и вызывает Environment.Exit.

0 голосов
/ 06 октября 2011

Сделайте его пустым, а не int.

public void myMethod(out int i)
{
    try
    {
       i = anythingHere();
    }
    catch
    {
        Environment.Exit(1);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...