2016-04-25 27 views
1

我只是好奇什么最佳实践解决方案将得到我目前的情况。我有一个以ARGB整数形式存储颜色的数据库,但我允许它为空,因为有时可能不需要指定颜色。使用实体框架,我有一个带有ColorArgb属性的生成类,用于访问返回的列和int,如预期的那样。我还手动添加了另一个属性Color,它返回一个System.Drawing.Color对象。 Color属性几乎只是一个过程,所以我可以以更自然的方式与生成的类进行交互。设置如此简单:给定可能为空的int时返回Color.FromArgb的最佳实践C#

ColorArgb = value.ToArgb(); 

但是,获得更有趣一点。这是我到目前为止有:

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

正如你所看到的,我想保持想法,一个颜色没有必要为这个类,所以我回到Color.Empty当底层ARGB值为空,但空合并运算符的右侧永远不会到达。我保证这个值不是null,但我不知道如何以最佳实践形式明确告诉编译器。不是一个严重的问题,但我想学习。因此,非常感谢所有帮助。

编辑:ColorArgb类型为System.Nullable<int>

+1

'ColorArgb'的类型是'int?'吗? – ZoolWay

回答

0

您不必如果您知道该值不为空使用空合并运算符。而是使用ColorArgb.Value

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

简单。完善。太感谢了。 将尽快答复。 –

+2

实际上,如果你想优化检查值是否为空,你应该使用'ColorArgb.GetValueOrDefault()'作为'ColorArgb.Value'将再次检查它是否为空内部,但'GetValueOrDefault'将简单地返回内部领域直接。但我怀疑这种情况甚至会有明显的不同。 –

2

更简洁的方法可以是这样的,如果你需要黑色的零整数值。

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

否则,检查空整型,你应该检查.HasValue属性,而不是像这样的空比较。

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

感谢您的回复!我只是做了一些挖掘,发现空比较被编译为调用'.HasValue'。仍然欣赏不同的视角。 –