2016-04-25 6 views
1

ベストプラクティスの解決策が私の現在の状況に与えられるのはどうか不思議でした。 ARGB整数形式で色を格納するデータベースがありますが、色を指定する必要がない場合があるので、null可能にすることができます。 Entity Frameworkを使用して、私は期待どおりに返され、intにその列にアクセスするためのColorArgbプロパティを持つ生成されたクラスを持っています。また、System.Drawing.Colorオブジェクトを返す別のプロパティColorを手動で追加しました。私は生成されたクラスともっと自然なやり方でやりとりすることができるので、Colorプロパティはちょっとしたことです。設定は次のように簡単です。nullの可能性があるintが指定されたときにColor.FromArgbを返すためのベストプラクティスC#

ColorArgb = value.ToArgb(); 

ただし、取得はもう少し面白いです。あなたが見ることができるように、私は色は、このクラスのために必要ではないので、基礎となるARGB値がnullのとき、私はColor.Emptyを返すという考えを維持したい

return ColorArgb == null ? Color.Empty : Color.FromArgb(ColorArgb ?? 0); 

、しかし:ここでは私がこれまで持っているものですヌル合体演算子の右辺に決して到達しない。値がnullではないことを保証しましたが、コンパイラにベストプラクティス形式で明示的に指示する方法がわかりません。深刻な問題ではありませんが、私は学びたいと思います。このように、すべての助けが大変に感謝しています。

編集:ColorArgbはタイプSystem.Nullable<int>

+1

タイプ 'int? 'の' ColorArgb'はありますか? – ZoolWay

答えて

0

であるあなたは値がnullでないことがわかっている場合はnull合体演算子を使用する必要はありません。代わりにColorArgb.Valueを使用する:あなたはゼロ整数値のための黒の色が必要な場合は

return ColorArgb == null ? Color.Empty : Color.FromArgb(ColorArgb.Value); 
+0

シンプル。完璧。感謝万円。 できるだけ早く回答としてマークします。 –

+2

実際には、値がnullの場合にチェックを最適化するには、 'ColorArgb.GetValueOrDefault()'を 'ColorArgb.Value'として使用して内部的にnullであるかどうかを再度確認しますが、' GetValueOrDefault'内部のフィールドに直接。私はこれがたとえずっと異なっていても疑いはない。 –

2

もっとクリーナーのアプローチは、このようなことができます。

return Color.FromArgb(ColorArgb.GetValueOrDefault()); 

null以外の整数をチェックするには、このようなnull比較の代わりに.HasValueプロパティをチェックする必要があります。

return ColorArgb.HasValue ? Color.FromArgb(ColorArgb.Value) : Color.Empty; 
+1

ありがとうございます!私はちょうどいくつかの調査を行い、null比較が '.HasValue'の呼び出しにコンパイルされていることを知りました。異なる視点には感謝しています。 –

関連する問題