我有一个文件名的数组。如果没有文件在数组中,我需要抛出一个异常。我可以使用try catch。任何人都知道请help.Thanks提前。使用try catch的C#条件检查
string[] fileEntries = Directory.GetFiles(filepath, "*.csv");.
// throw an exception if no files
if (fileEntries.Length == 0){}
我有一个文件名的数组。如果没有文件在数组中,我需要抛出一个异常。我可以使用try catch。任何人都知道请help.Thanks提前。使用try catch的C#条件检查
string[] fileEntries = Directory.GetFiles(filepath, "*.csv");.
// throw an exception if no files
if (fileEntries.Length == 0){}
我需要抛出exception.Can我使用尝试捕捉
的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);
}
}
我可以通过一个前OBJ与异常的添加数据作进一步检查
看看基本Exception的构造它可以让你通过一个string
作为信息来源,或作为additional exception内部异常。
编辑:
如果你创建自己的custom exception由Corak建议。你可以定义自己的构造函数,并通过例如一个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);
}
}
Hi.Thanks for the .can我可以通过一个ex obj来添加异常来添加一个数据进一步检查? –
@John_Snow你能详细说一点吗?目前还不清楚你打算做什么。 – Fildor
我想为每个类型的异常添加一个错误代码。因此,如果邮件服务器wouild喜欢使用ex.data.add(“Error”,E1)传递ex对象的值 –
仅举一例:
if (fileEntries.Length == 0)
{
throw new ArgumentException("FileNames array must not be empty!");
}
您必须决定抛出什么样的异常。 ArgumentException的将是确定的,如果fileEntries是一个参数,以你的方法...
但:我想建议不要做这种方式。例如,您可以返回一个指示成功/失败的布尔或错误代码。检查它比客户端上的try/catch更便宜。对控制流使用异常通常是不被接受的。
有关更多信息,请参阅https://softwareengineering.stackexchange.com/a/189225。
捕捉异常与抛出异常相反。如果您只是搜索'C#抛出异常',您还会发现很多示例。 – Rob
另请参见:[异常和异常处理](https://docs.microsoft.com/dotnet/csharp/programming-guide/exceptions/) – Corak