2011-12-16 85 views
3

我有一堆重复的代码看起来像这样:定义这种扩展方法的缺点是什么?

If mValue is Nothing Return "" 
Return mValue.ToUpper 

我定义了以下扩展方法,以减少重复代码:

<System.Runtime.CompilerServices.Extension()> 
Public Function EmptyIfNull(this As String) As String 
    If String.IsNullOrEmpty(this) Then Return "" 
    Return this 
End Function 

重复的代码可以改写为:

Return mValue.EmptyIfNull.ToUpper 

这是否有缺点?

+0

我不这么认为。你仍然使用string.IsNullOrEmpty(),没有更多。是的,我可以看到一个好处,你可以在没有任何条件和其他条件的情况下在单个语句中使用它。 – 2011-12-16 16:05:09

回答

2

唯一的缺点是,你基本上重现什么已经在语言(空合并运算符,或If function,因为它在VB.NET实现真实)

Return If(mValue, "").ToUpper() 

应该做你在找什么对于。

至于你的扩展方法,没有必要拨打String.IsNullOrEmpty,因为你只需要处理它的情况下,它的Nothing

+0

从代码可读性的角度来看,我更喜欢`mValue.EmptyIfNull.ToUpper`。 – 2011-12-16 16:03:34

1

不,这样做没有缺点。该方法很简单,它涵盖了一个合法的用例,并且名称很好。

这里要考虑的唯一事情是你如何真正使用它:也许它会抛出一个ArgumentNullException(更合适的类型或其他异常)如果mValuenull更合适 - 但是这取决于调用者。

+0

我同意。在许多情况下,最好先确保该值不为空,这样在之后的任何地方都不需要调用EmptyIfNull。 – 2011-12-16 16:06:16

0

很容易理解它的功能(这是最重要的)。

它也生产更干净的代码。