![](/img/trans.png)
[英]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.