C# 我应该通过返回null或抛出自定义execption来处理开发人员失败吗
当开发人员传递一个不存在的resourceKey时,我通过使用“as”操作符捕捉到他的失败 选项1:C# 我应该通过返回null或抛出自定义execption来处理开发人员失败吗,c#,.net,exception-handling,C#,.net,Exception Handling,当开发人员传递一个不存在的resourceKey时,我通过使用“as”操作符捕捉到他的失败 选项1: var image = resourceManager.GetObject(resourceKey) as Bitmap; return image; 选项2 var image = resourceManager.GetObject(resourceKey) as Bitmap 我是否应该在此处检查null并抛出自定义执行选项(“给定键的图像不存在!”) 我“假设”每个开发人员都
var image = resourceManager.GetObject(resourceKey) as Bitmap;
return image;
选项2
var image = resourceManager.GetObject(resourceKey) as Bitmap
我是否应该在此处检查null并抛出自定义执行选项(“给定键的图像不存在!”)
我“假设”每个开发人员都测试自己的代码,因此将不存在的resourcekey作为字符串传递应该会导致GetObject方法调用出现异常
当开发人员只返回null而不显示任何内容时,有什么好处?实际上没有好处
但我的同事们的看法不同……我在实施公共图书馆时也遇到了同样的问题 我认为通常最好是确保开发人员知道他们在做什么。如果一个值可以为null或抛出异常,他需要知道这一点 该方法说的是
GetBitmap
,而不是PleaseTryGetBitmap
或FindBitmap
(find意味着可能找不到某些内容)。因此,该方法的契约明确规定,应该为给定名称获取位图。其他任何事情都是异常情况,因此应该抛出异常
因此,我建议为您的问题提供两种解决方案:
1。抛出异常并添加一个
来记录您的方法。
包括在引发的异常中失败的密钥。它使调试变得容易得多
/// <exception cref="ArgumentException"></exception>
public Bitmap GetBitmap(string resourceKey)
{
var bitmap = resourceManager.GetObject(resourceKey) as Bitmap;
if (bitmap == null) throw new ArgumentOutOfRangeException("resourceKey", resourceKey, "Failed to find resource with the specified name.");
return bitmap != null;
}
没有回答您的问题,但我认为您应该先检查资源对象,然后再将其转换为
位图
。一种是不要将异常用于您可以以其他方式处理的事情,因为catch块是性能杀手。另一个是不使用异常作为流控制。Linvi的回答第二个选项对于这些情况是一个很好的解决方案。您可能希望将该方法重命名为TryGetBitmap
或返回Image
,而不是Bitmap
添加了第一个示例+1:)我认为您应该在第一个示例中“返回位图;”
public bool TryGetBitmap(string resourceKey, out Bitmap bitmap)
{
bitmap = resourceManager.GetObject(resourceKey) as Bitmap;
return bitmap != null;
}