我应该通过返回null或抛出自定义exec来处理开发人员失败

时间:2016-04-13 09:36:22

标签: c# .net exception-handling

当开发人员传递不存在的resourceKey时,我通过使用' as'来抓住他的失败。操作

option1

  var image = resourceManager.GetObject(resourceKey) as Bitmap;
   return image;

选项2

var image = resourceManager.GetObject(resourceKey) as Bitmap

我应该在这里检查并抛出自定义执行("给定密钥的图像不存在!")

我"假设"每个开发人员测试他的代码,因此将不存在的 resourcekey作为字符串传递应该会导致GetObject-Method调用出现异常。

当开发人员返回null并且没有显示任何内容时,开发人员有什么好处?实际上没有任何好处。

但我的同事们有不同意见......

1 个答案:

答案 0 :(得分:2)

在实施公共图书馆时遇到了同样的问题。

我认为通常最好确保开发人员了解他们的所作所为。如果某个值可以为null或抛出异常,则需要注意这一点。

该方法显示GetBitmap,它没有说PleaseTryGetBitmapFindBitmap查找意味着可能找不到某些内容)。因此,方法的契约明确地说应该为给定的名称提取位图。任何其他事情都是例外情况,因此应抛出异常。

所以我会为您的问题建议2个解决方案:

<强> 1。抛出异常并添加<exception>以记录您的方法。

包含抛出异常中失败的密钥。它使调试变得更容易。

/// <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;
}

<强> 2。使用tryGet样式方法,如下所示。

这将强制开发人员检查该值是否存在并根据此行为。

public bool TryGetBitmap(string resourceKey, out Bitmap bitmap)
{
    bitmap = resourceManager.GetObject(resourceKey) as Bitmap;
    return bitmap != null;
}