[英]how to create a function to tell me if a statement throws an exception or not in c#
[英]How to check if a function throws an exception in c#?
如何检查函数是否在C#中引发异常?
public List<string> GetFileNames()
{
try
{
// do something
// return something
}
catch(Exception ex)
{
// do something
// log something
}
}
然后我将在代码中的某处调用GetFileNames()
,但我想检查它是否引发异常,例如,
var list = GetFileNames(); // can be 0 count
if(GetFileNames() throws an error)
{
DoThisMethod()
}
else
{
DoThisOtherMethod();
}
您在这里有很多选择:
通常使用Try...
模式(如TryParse
完成此操作。
bool TryGetFileNames(out List<string> fileNames)
您还可以返回null
。
我认为您可以使其更简单:
public void ICallGetFileNames()
{
var list = new List<YourObject>();
try
{
list = GetFileNames();
DoThisOtherMethod();
}
catch (Exception ex)
{
DoThisMethod();
}
}
这样,如果您的GetFileNames方法引发了异常,则不会调用DoThisOtherMethod(),因为您的代码将直接进入Exception块。 否则,如果未引发任何异常,则您的代码将在GetFileNames方法之后调用DoThisOtherMethod。
根本的问题是,您无法处理异常时就尝试这样做。
如果GetFilenames无法从异常中恢复,则它本身应引发异常。 这可能是通过完全省略try / catch,或通过捕获,包装和重新抛出来实现的。
public List<string> GetFilenames() {
try {
...
} catch (Exception e) {
throw new FileLoadException("Failed to get filenames", e);
// Or if you don't want to create custom exceptions, perhaps use an InvalidOperationException
}
}
失败的话,如果您实际上不需要抽象功能,则根本不要在GetFilenames中捕获异常,然后按以下方式调用它:
try {
var list = GetFilenames()
DoSomething();
} catch (Exception e) {
DoSomethingElse();
}
您无法在C#中执行此操作。
与您所描述的最接近的是用Java实现的“检查的异常”。 在这种情况下,该函数将声明它抛出一些异常,如下所示:
public void foo() throws IOException {
// your code
}
在编译时,您可能需要将其封装在TryCatch块中,或者以相同的方式在函数中传播它,以解决此问题。
在c#中,将函数封装在TryCatch块中,并在出现故障的情况下使用其他函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.