我需要抛出一个异常。我可以使用 try catch
try/catch 块用于捕获异常并使用该信息执行某些操作。如果需要抛出异常,直接抛出即可
if (fileEntries.Length == 0)
{
throw new Exception("No *.csv files available");
}
这个异常现在将向上抛出到调用这段代码所在的方法的方法。使用 try/catch 块,您现在可以决定要在哪个级别捕获此异常并使用该信息。
例子
void method1(){ method2(); }
void method2(){ method3(); }
void method3()
{
string[] fileEntries = Directory.GetFiles(filepath, "*.csv");.
if (fileEntries.Length == 0)
{
throw new Exception("No *.csv files available");
}
}
如果没有被捕获,这个异常将向上传播到method1 并阻止你的程序执行/彻底中止它。您可以在此级别捕获它并(例如,如果您有一个控制台应用程序)将信息呈现给用户:
void method1()
{
try
{
method2();
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
}
我可以传递一个 ex obj 以添加数据以供进一步检查
查看基本Exception 的构造函数,它将允许您将string 作为信息源传递,或者将additional exception 作为内部异常传递。
编辑:
如果您按照Corak 的建议创建自己的custom exception。您可以定义自己的构造函数并传递例如enum 作为错误代码:
public enum ErrorCodes
{
E1,
E2,
S4,
P5
}
public class MyObjectTransferException : Exception
{
public object ErrorCode { get; set; }
public MyObjectTransferException(string message, ErrorCodes code) : base(message)
{
this.ErrorCode = code;
}
}
现在在method3 中,您将完全抛出这种类型的异常:
void method3()
{
string[] fileEntries = Directory.GetFiles(filepath, "*.csv");.
if (fileEntries.Length == 0)
{
throw new MyObjectTransferException("No *.csv files available", ErrorCodes.E1);
}
}
在method1 中,您需要准确捕获此类异常:
void method1()
{
try
{
method2();
}
catch(MyObjectTransferException ex)
{
Console.WriteLine(ex.Message);
Console.WriteLine(ex.ErrorCode);
}
}