Last active
December 12, 2015 10:09
-
-
Save yetanotherchris/4756647 to your computer and use it in GitHub Desktop.
Three ways to leave your Exception
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Program | |
{ | |
static void Main(string[] args) | |
{ | |
// Output: | |
// | |
// Invalid operation: Could not find file 'C:\this doesnt exist.txt'. | |
// Could not find file 'C:\this doesnt exist.txt'. | |
// Could not find file 'C:\this doesnt exist.txt'. | |
// | |
try | |
{ | |
ThrowTest.ThrowNew(); | |
} | |
catch (Exception ex) | |
{ | |
Console.WriteLine(ex.Message); | |
} | |
try | |
{ | |
ThrowTest.Throw(); | |
} | |
catch (Exception ex) | |
{ | |
Console.WriteLine(ex.Message); | |
} | |
try | |
{ | |
ThrowTest.ThrowEx(); | |
} | |
catch (Exception ex) | |
{ | |
Console.WriteLine(ex.Message); | |
} | |
Console.ReadLine(); | |
} | |
} | |
public class ThrowTest | |
{ | |
public static void ThrowNew() | |
{ | |
try | |
{ | |
File.OpenText(@"C:\this doesnt exist.txt"); | |
} | |
catch (IOException ex) | |
{ | |
// InnerException is null, and the stacktrace starts at ThrowNew() | |
throw new InvalidOperationException("Invalid operation: " + ex.Message); | |
} | |
} | |
public static void Throw() | |
{ | |
try | |
{ | |
File.OpenText(@"C:\this doesnt exist.txt"); | |
} | |
catch (IOException ex) | |
{ | |
// This maintains the entire stacktrace, so will include the chain that occured inside the Framework, | |
// i.e. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) | |
throw; | |
} | |
} | |
public static void ThrowEx() | |
{ | |
try | |
{ | |
File.OpenText(@"C:\this doesnt exist.txt"); | |
} | |
catch (IOException ex) | |
{ | |
// InnerException is null, and the stacktrace starts at ThrowEx(). It's the least useful of the three. | |
throw ex; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment