How to Exit a Method without Exiting the Program?

C#MethodsReturnExit

C# Problem Overview


I am still pretty new to C# and am having a difficult time getting used to it compared to C/CPP.

How do you exit a function on C# without exiting the program like this function would?

if (textBox1.Text == "" || textBox1.Text == String.Empty || textBox1.TextLength == 0)
    textBox3.Text += "[-] Listbox is Empty!!!!\r\n";
System.Environment.Exit(0);

This will not allow return types and if left alone it will keep going on through the function unstopped. Which is undesirable.

C# Solutions


Solution 1 - C#

There are two ways to exit a method early (without quitting the program):

  • Use the return keyword.
  • Throw an exception.

Exceptions should only be used for exceptional circumstances - when the method cannot continue and it cannot return a reasonable value that would make sense to the caller. Usually though you should just return when you are done.

If your method returns void then you can write return without a value:

return;

Specifically about your code:

  • There is no need to write the same test three times. All those conditions are equivalent.

  • You should also use curly braces when you write an if statement so that it is clear which statements are inside the body of the if statement:

     if (textBox1.Text == String.Empty)
     {
         textBox3.Text += "[-] Listbox is Empty!!!!\r\n";
     }
     return; // Are you sure you want the return to be here??
    
  • If you are using .NET 4 there is a useful method that depending on your requirements you might want to consider using here: String.IsNullOrWhitespace.

  • You might want to use Environment.Newline instead of "\r\n".

  • You might want to consider another way to display invalid input other than writing messages to a text box.

Solution 2 - C#

In addition to Mark's answer, you also need to be aware of scope, which (as in C/C++) is specified using braces. So:

if (textBox1.Text == "" || textBox1.Text == String.Empty || textBox1.TextLength == 0)
    textBox3.Text += "[-] Listbox is Empty!!!!\r\n";
return;

will always return at that point. However:

if (textBox1.Text == "" || textBox1.Text == String.Empty || textBox1.TextLength == 0)
{
    textBox3.Text += "[-] Listbox is Empty!!!!\r\n";
    return;
}

will only return if it goes into that if statement.

Solution 3 - C#

I would use return null; to indicate that there is no data to be returned

Solution 4 - C#

The basic problem here is that you are mistaking System.Environment.Exit for return.

Solution 5 - C#

If the function is a void, ending the function will return. Otherwise, you need to do an explicit return someValue. As Mark mentioned, you can also throw an exception. What's the context of your question? Do you have a larger code sample with which to show you some ways to exit the function?

Solution 6 - C#

@John, Earlz and Nathan. The way I learned it at uni is: functions return values, methods don't. In some languages the syntax is/was actually different. Example (no specific language):

Method SetY(int y) ...
Function CalculateY(int x) As Integer ...

Most languages now use the same syntax for both versions, using void as a return type to say there actually isn't a return type. I assume it's because the syntax is more consistent and easier to change from method to function, and vice versa.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionNightforce2View Question on Stackoverflow
Solution 1 - C#Mark ByersView Answer on Stackoverflow
Solution 2 - C#SmasheryView Answer on Stackoverflow
Solution 3 - C#beaumondoView Answer on Stackoverflow
Solution 4 - C#Loren PechtelView Answer on Stackoverflow
Solution 5 - C#user29439View Answer on Stackoverflow
Solution 6 - C#user348905View Answer on Stackoverflow