gpt4 book ai didi

c# - 在方法中使用 `try-catch` 是不好的做法吗?

转载 作者:行者123 更新时间:2023-11-30 15:22:32 24 4
gpt4 key购买 nike

class Program
{
public static void Main(string[] args)
{
try
{
checkifStringNull(string check)
Clean();
}
catch(ArgumentNullException msg)
{
Console.WriteLine(msg.Message);
}


}
public static int Clean()
{
List<string> errorLog = new List<string>();

foreach (DirectoryInfo dir in directories)
{
try
{
dir.Delete(true);
}

catch(System.UnauthorizedAccessException msg)
{
code = 5;
errorLog.Add(String.Concat(dir.FullName," ", code ," ", msg.Message));
Console.WriteLine("Error Removing the directory: {0}", dir.FullName);

}
catch(System.IO.IOException msg)
{
code = 5;
errorLog.Add(String.Concat(dir.FullName," ", code ," ", msg.Message));
Console.WriteLine("Error Removing the directory: {0}", dir.FullName);

}
}
}

public static void checkifStringNull(string check)
{
if(string.IsNullOrWhiteSpace(check))
{
throw new ArgumentNullException(String.Format("String can't be null"));
}

}

我有一个方法可以删除特定路径的子目录。如果我在方法中有 try catch 可以吗?原因是我想直接访问引发异常的循环内的变量(目录),对我来说它更有条理。如果我要从方法中删除代码并将其放在 main 中,它将如下所示:

public static void Main(string[] args)
{

try
{
checkifStringNull(string check)
List<string> errorLog = new List<string>();

foreach (DirectoryInfo dir in directories)
{
try
{
dir.Delete(true);
}

catch(System.UnauthorizedAccessException msg)
{
code = 5;
errorLog.Add(String.Concat(dir.FullName," ", code ," ", msg.Message));
Console.WriteLine("Error Removing the directory: {0}", dir.FullName);

}
catch(System.IO.IOException msg)
{
code = 5;
errorLog.Add(String.Concat(dir.FullName," ", code ," ", msg.Message));
Console.WriteLine("Error Removing the directory: {0}", dir.FullName);

}
}

}
catch(ArgumentNullException msg)
{
Console.WriteLine(msg.Message);
}


}

我在另一个 try-catch 中嵌入了一个 try-catch,这被认为是不好的做法还是效率低下?

最佳答案

在方法中使用 try-catch 没有错,在另一个 try-catch 中使用 try-catch 也没有错.

唯一重要的是谁处理异常的工作。

有时您有一个方法,其唯一的工作就是尝试执行一项任务,而不是处理异常情况。该方法不应捕获异常。

有时您有一个方法,您想要处理许多甚至所有异常情况,否则不返回控制权。此方法会捕获异常,并且可能需要大量代码来执行此操作,可能带有嵌套的 try-catch block 。

现实生活也是如此。有时您希望有人尝试给您倒杯咖啡,但如果没有成功(这个地方关门了,队伍真的很长)他们应该回来,您会处理它。其他时候,您希望他们出去喝咖啡,而不是空手而归。两者都是完全合法的;这仅取决于您想要发生什么。这完全是个案分析。

许多初学者(甚至更多!)都犯了一个错误,认为他们应该捕获所有异常并且从不抛出一个异常。这就像保姆一样,认为处理出现的任何异常情况是他们的工作。溢出的苏打水可能是正确的。但是当窗帘着火时,您可能更希望由其他人处理异常。

关于c# - 在方法中使用 `try-catch` 是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35495315/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com