gpt4 book ai didi

c# - 我应该在哪里创建一个异常对象?

转载 作者:行者123 更新时间:2023-12-03 16:49:36 25 4
gpt4 key购买 nike

Best practices for exceptions MSDN 上的文档说,如果要在类的许多部分使用相同的异常,则可以在类中使用异常构建器方法。而且,它说在某些情况下,最好使用异常的构造函数。

假设我在 UserData 中有以下代码类(class):

private MailAddress _addr;

public UserData(string emailAddress)
{
// Tries to validate the e-mail address
try
{
_addr = new MailAddress(emailAddress);
}
catch
{
throw new ArgumentException(nameof(emailAddress), "Invalid email address.");
}
if (_addr.Address != emailAddress)
{
throw new ArgumentException(nameof(emailAddress), "Invalid email address.");
}
}

您可以在 throw 中看到这一点。语句,我抛出完全相同的异常。

问题是:添加一个异常构建器方法来获取我的异常并抛出它是否正确?如果我这样做,我会得到正确的堆栈跟踪吗?如果不是,我如何确定异常构建器和构造函数之间?

最佳答案

Is it correct to add an exception builder method to get my exception and throw that



那要看。正如您链接的文章中所建议的那样:如果它是相同的异常(具有相同的信息),那么创建这样一个辅助方法来保持代码清洁是有意义的。

Will I get the correct stacktrace and such if I do so



是的你将会。
看看这个例子。 (DotNetFiddle) .
public static void Main() 
{
try{
throw CreateEx("Hi");
} catch(Exception ex) {
Console.WriteLine(ex.ToString());
}

try {
CreateEx2("Hi");
} catch(Exception ex) {
Console.WriteLine(ex.ToString());
}

}

public static Exception CreateEx(string text){
text += " Additional text";

return new ArgumentOutOfRangeException(text);
}

public static void CreateEx2(string text){
text += " Additional text";

throw new ArgumentOutOfRangeException(text);
}

堆栈跟踪取决于抛出异常的位置,而不是构建它的位置。
System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
Parameter name: Hi Additional text
at Program.Main() in d:\Windows\Temp\b4ln3dbq.0.cs:line 13
System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
Parameter name: Hi Additional text
at Program.CreateEx2(String text) in d:\Windows\Temp\b4ln3dbq.0.cs:line 34
at Program.Main() in d:\Windows\Temp\b4ln3dbq.0.cs:line 19

关于c# - 我应该在哪里创建一个异常对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60637498/

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