2011-12-16 7 views
3

私はこのようになります重複したコードの束を持っている:この拡張メソッドを定義する際の欠点は何ですか?

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

重複したコードは次のように書き換えることができます。

If mValue is Nothing Return "" 
Return mValue.ToUpper 

私はコードの重複を減らすために、次の拡張メソッドを定義し:

Return mValue.EmptyIfNull.ToUpper 

これには欠点がありますか?

+0

私は思っていません。あなたはまだstring.IsNullOrEmpty()を使用しています。はい、私は見ることができる利点があります、あなたはifとelse条件なしで単一のステートメントでそれを使用することができます。 –

答えて

2

唯一の欠点は、あなたが、本質的に(それがVB.NETで実装されますよう、null合体演算子、またはIf function)言語で、すでに何再現していることである

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

は、あなたが探しているものを行う必要がありますために。

拡張メソッドについては、Nothingの場合のみ処理する必要があるため、String.IsNullOrEmptyに電話する必要はありません。

+0

私はコードの読みやすさの観点から 'mValue.EmptyIfNull.ToUpper'を好む。 –

+0

どちらが読みやすくなっていますか?拡張メソッドが何をするのかを読むことができますが、コードが何をしているのかを知るためにコードを評価する必要があります。 – jgauffin

+0

私はextメソッドを読みやすくする方が好きです。特にC#では '(mValue ?? String.Empty).ToUpper()'がIMHOのように見えます。また、 '' ''をより正確な 'String.Empty'に置き換えることで、入力に時間がかかるようになります。 – Jon

1

いいえ、これには欠点はありません。このメソッドは単純で、正当なユースケースをカバーしています。

ここで考慮すべき唯一のことは、あなたが実際にそれを使っている方法です:mValuenullであれば、おそらくArgumentNullException(より適切なタイプのまたは他の例外)をスローするように、より適切であろう - それは、呼び出し元に依存します。

+0

私は同意します。多くの場合、値が最初にヌルでないことを確認することが望ましいので、後で 'EmptyIfNull'を呼び出す必要はありません。 –

0

これが何をしているのか(それが最も重要なことです)理解しやすいです。

また、よりクリーンなコードも生成されます。

関連する問題