2015-09-22 9 views
6

null可能なタイプの表示形式について疑問があります。現時点では、私がNULL可能タイプのフィールドは確かに私はこのようにそれをコーディングし、null値を持っていないことを示すために必要がある場合:nullを表示するためのよりエレガントな方法は?

var stringToDisplay = nullableDecimal.HasValue ? nullableDecimal.ToString() : "N/A"; 

か、その基本的なテキストのいくつかのバリエーション。

私は合体演算子を使用することができるとは思わない - あるいは、少なくとも私は(私が間違っているなら、私を修正)正しいアプローチだとは思いません。

これを行うには、より効率的な方法がありますか?私はちょうどこの定型的なコードが最近コードベースに襲い掛かっているように感じています...

+0

どのC#バージョンですか? –

+1

なぜ一般的な拡張メソッドではありませんか? –

答えて

11

あなたのアプローチは、それ自体は悪くないですが、コードの重複のためのあなたの心配について正しい:

次に、あなたがこのようにそれを呼び出すことができます。

public static class DecimalExtensions 
{ 
    public static string Display(this decimal? value) 
    { 
     return value.HasValue ? value.ToString(): "N/A"; 
    } 
} 

この例では、拡張メソッドを作成しましたが、通常のメソッドもうまくいきます。次に、あなただけ行うことができます:読み進歩して、コードに「N/A」の無数のを防ぐ(とコメントで述べたように、また、これまで必要に応じてリファクタリングが容易になります)

var stringToDisplay = nullableDecimal.Display(); 

を... 。

+2

私はちょうど正に同じものを入力していましたが、 "None"のようなリファクタリングが必要な場合は、 "N/A"文字列を変更する必要があります。 。 –

+0

ありがとう、コナミマン - これは道のりであると私は同意します。 – code4life

+0

スペルミス:DecimalExtenstionsはDecimalExtensionsでなければなりません。 – Polyfun

8

C#5以前では、あなたのコードはおそらくそれと同じくらい良いですが、あなたはどこにでもそれを振りかけることができました。

はまた、あなたがそれを変更したい場合には、一定のに"N/A"を詰めることを検討してください。

それがより良い多くを得ることはありませんが、しかし、C#6であなたは、多少それを変更することができます。

var stringToDisplay = nullableDecimal?.ToString() ?? "N/A"; 

?.演算子は「ヌル条件付き」演算子と呼ばれ、基本的には短いですあなたが始めなければならなかった式の構文。

基本的には、表現の一部が、このことを意味します

string temp = nullableDecimal != null ? nullableDecimal.ToString() : null; 

?.オペレータはだけでなく二度、一度前の部分を評価しますので、それはより多くのこのようなものだが:

var operand = nullableDecimal; 
string temp = operand != null ? operand.ToString() : null; 

しかし、ここではそれほど重要ではありませんが、メソッド呼び出しの場合は、そうかもしれません。メソッドにそれを抽出するよう

、単に拡張メソッドを作成:

public static class MyNullableDecimalExtensions 
{ 
    public static string ToDisplayText(this decimal? value) 
    { 
     if (decimal.HasValue) 
      return decimal.Value.ToString(); 
     return "N/A"; 
    } 
} 

を私は?:演算子の構文の過度に好きではないんだ、そうだとすれば、このような方法で、私は完全なアウト書きます代わりに - 記述。

var stringToDisplay = nullableDecimal.ToDisplayText(); 
+0

あなたとコナミマンの答えの両方を受け入れることができれば、私はそうです!あなたからの指導のおかげで両方 - 私は両方の答えの一部を使用して、多くの喜びで終わった。 – code4life

関連する問題