如何检查函数是否在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();
}
答案 0 :(得分:2)
你有很多选择:
这通常使用Try...
模式,例如TryParse
。
bool TryGetFileNames(out List<string> fileNames)
您还可以返回null
。
答案 1 :(得分:0)
我认为你可以更简单:
public void ICallGetFileNames()
{
var list = new List<YourObject>();
try
{
list = GetFileNames();
DoThisOtherMethod();
}
catch (Exception ex)
{
DoThisMethod();
}
}
这样,如果GetFileNames方法抛出异常,则不会调用DoThisOtherMethod(),因为您的代码将直接进入Exception块。否则,如果没有抛出异常,您的代码将在GetFileNames方法之后调用DoThisOtherMethod。
答案 2 :(得分:0)
根本问题在于,当您无法执行此操作时,您会尝试处理异常。
如果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();
}
答案 3 :(得分:0)
你不能在c#中这样做。
与您所描述的最接近的是&#34;已检查的异常&#34;这是在java中实现的。在这种情况下,函数将声明它抛出一些异常,如下所示:
public void foo() throws IOException {
// your code
}
在 编译 时,您可以通过将其封装在TryCatch块中或在您的函数中以相同的方式传播来解决此问题。
在c#中包含TryCatch块中的函数并在faliure中使用不同的函数。