gpt4 book ai didi

c# - .Net如何检测在执行程序集时是否通过代码手动抛出内置异常

转载 作者:行者123 更新时间:2023-12-04 11:58:29 26 4
gpt4 key购买 nike

在我的代码中有很多地方我们手动“抛出”InvalidOperationException。我们有专门的处理程序来处理这种异常类型。但是,如果异常是因为 而出现,我们必须根据事实编写一些逻辑。扔或者它来自系统。下面是示例:

 static void Main(string[] args)
{
try
{
Console.WriteLine("Hello World!");
//throwFirstLayer(); //if i uncomment this i am throwing the error manually
var people = new List<Person>();

people.Add(new Person("John", "Doe"));
people.Add(new Person("Jane", "Doe"));
people.Sort(); //Suppose in this line system throws InvalidOp exception
foreach (var person in people)
Console.WriteLine("{0} {1}", person.FirstName, person.LastName);
}

catch(InvalidOperationException ioex)
{
var e = ioex;
}
}

public static void throwFirstLayer()
{
throw new InvalidOperationException("manual");
}

public class Person
{
public Person(String fName, String lName)
{
FirstName = fName;
LastName = lName;
}

public String FirstName { get; set; }
public String LastName { get; set; }
}
在 catch 块内,我想检测异常是否为 抛出 由我手动从代码还是系统由于实际无效操作而引发它?

最佳答案

您可以检查异常的堆栈跟踪并查看它的来源 - 但由于 JIT 优化,这很慢,并且在生产中容易出错。
我会质疑首先需要这个设计的智慧,但如果你真的,真的,真的需要这样做,我建议创建你自己的从 InvalidOperationException 派生的特定类。 - 确保你只抛出那个(而不是普通的 InvalidOperationException ),然后你可以检查任何给定的实例是否具有你的自定义异常类型的具体类型。

关于c# - .Net如何检测在执行程序集时是否通过代码手动抛出内置异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68288850/

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