我有一个文件名数组。如果数组中没有文件我需要抛出异常。我可以使用try catch。任何人都知道请帮助。谢谢。提前感谢。
string[] fileEntries = Directory.GetFiles(filepath, "*.csv");.
// throw an exception if no files
if (fileEntries.Length == 0){}
答案 0 :(得分:4)
我需要抛出异常。我可以使用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作为内部例外。
修改强>
如果您按照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);
}
}
答案 1 :(得分:0)
只是一个例子:
if (fileEntries.Length == 0)
{
throw new ArgumentException("FileNames array must not be empty!");
}
你必须决定抛出什么样的异常。如果fileEntries是您的方法的参数,那么ArgumentException就可以了......
但是:我想建议不要这样做。例如,您可以返回指示成功/失败的bool或错误代码。检查比客户端上的try / catch更便宜。并且通常不赞成使用控制流的异常。
有关详情,请参阅https://softwareengineering.stackexchange.com/a/189225。