Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Three ways to leave your Exception
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
You can’t perform that action at this time.