如果我为消费者编写dll,在catch范围内抛出异常或将其写为引用或输出字符串参数更好吗?
据我所知,异常确保失败不会被忽视,因为调用代码没有检查返回代码。https://learn.microsoft.com/en-us/dotnet/standard/exceptions/best-practices-for-exceptions
以下两个选项中哪个是最好的?
选项a
static void ThrowException(string value)
{
try
{
//Some code....
}
catch (Exception)
{
//Log Exception
throw;
}
}
选项B
static void RefException(string value, ref string errorMessage)
{
try
{
//Some code...
}
catch (Exception ex)
{
//Log Exception
errorMessage = ex.ToString();
}
}
我相信你正在寻找创建自定义异常以外的。net异常
用下面的代码更新你的代码,并根据你的需要创建自定义异常。
public void ThrowException()
{
if (string.IsNullOrEmpty(value))
{
throw new NullException();
}
if (value.Length > 10)
{
throw new LengthException();
}
}
public class NullException : Exception
{
NullException() : base(NullException.GetMessage())
{
}
public static string GetMessage()
{
return "value is null or empty";
}
}
public class LengthException : Exception
{
LengthException() : base(LengthException.GetMessage())
{
}
public static string GetMessage()
{
return "value length greater then 10 exception";
}
}
选项A当您验证某些特定的条件时,它将通知客户端正确的错误消息。虽然其他选项也通过抛出异常来做同样的事情,但为验证抛出异常并不是好的做法。如果应用程序中出现任何异常,那么抛出包含所有详细信息的异常并不是一个好做法,因为它可能会通过向客户端应用程序提供不必要的详细信息而导致安全威胁。始终建议登录并向客户端应用程序显示修改后的消息。
在这种情况下,你应该使用throw Exception,因为你可以将自定义消息传递给客户端应用程序,当你使用ref option时,错误消息可能会被应用程序的另一个组件修改,这可能会误导异常信息。