gpt4 book ai didi

c# - 在 C# 中捕获自定义异常

转载 作者:行者123 更新时间:2023-12-04 15:58:59 25 4
gpt4 key购买 nike

关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。












想改进这个问题?将问题更新为 on-topic对于堆栈溢出。

8年前关闭。




Improve this question




我创建了一个自定义异常类,如下所示

namespace testingEXception
{
public class CustomException : Exception
{
public CustomException()
{
}
public CustomException(string message)
: base(message)
{
}

public CustomException(string message, Exception innerException)
: base(message, innerException)
{

}
}
}

我在这样的同一解决方案中从不同项目中抛出异常
namespace ConsoleApplication1
{
public class testClass
{
public void compare()
{
if (1 > 0)
{
throw new CustomException("Invalid Code");
}
}
}
}

像这样捕获它
    namespace testingEXception
{
class Program
{
static void Main(string[] args)
{
try
{
testClass obj = new testClass();
obj.compare();

}
catch (testingEXception.CustomException ex)
{
//throw;
}
catch (Exception ex)
{
// throw new CustomException(ex.Message);
}

Console.ReadKey();
}
}
}

问题是,异常不是被第一个 catch 捕获,而是被第二个 catch 捕获,尽管异常类型显示 CustomException。

最佳答案

您需要提供更多详细信息,以下代码输出“CustomException”:

try
{
throw new CustomException("Invalid code.");
}
catch (CustomException ex)
{
System.Diagnostics.Trace.WriteLine("CustomException");
throw;
}
catch (Exception ex)
{
throw;
}

使用以下类(class):
public class CustomException : Exception
{
public CustomException()
{
}
public CustomException(string message)
: base(message)
{
}

public CustomException(string message, Exception innerException)
: base(message, innerException)
{

}
}

更新:

关于优化和优化一个 throw :这不可能发生,因为任何特定的代码块都无法知道堆栈中更高的调用者是否有代码可以捕获 CustomException .抛出异常是一种可见的副作用,并且 CLI 中有各种保证来确保这些可见的副作用仍然可见。

此外,try、catch 和 finally block 是 CLI 语言中的“ protected 区域”。这些区域的特殊之处在于,具有“可见”副作用的区域内的操作不能对其可见的副作用进行重新排序。更多详细信息,请参阅 http://lynk.at/qH8SHkhttp://lynk.at/pJcg98

关于c# - 在 C# 中捕获自定义异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18237804/

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