3 ways to leave your exception
Below is a small reference detailing the 3 ways to deal with throwing/re-throwing exceptions in C#.
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;
}
}
}
Last updated on 09 September 2009
Comments
blog comments powered by