如果myMethod
是你写的,我建议使用可空类型,为System.Drawing.Color
是值类型。因此,可以编写这样的方法:
protected void myMethod(Color? color,other parameters...)
{
if (color == null) // or !Color.HasValue
{
// color-is-null logic
}
else
{
var col = color.Value;
// col is an instance of System.Drawing.Color
// Use `col` instead of color from your current `myMethod`
// implementation
}
}
或者,如果不能改变的(例如myMethod
实现这迫使你使用Color
代替Color?
的界面),则可能回退到传递无意义的Color
类型的值。例如Color.Transparent
可能有效,但这只是一个假设。该代码,这需要你的首要条件上述myMethod
如果从
if (color == null) ...
改变
if (color == Color.Transparent) ...
更新
的问题已经得到澄清之后,我变得更好想要的结果,假设你已经重构了myMethod
接受Color?
而不是的Color
,可以消除样板代码:
if (1) {myMethod(Color.Red,....)}
if (2) {myMethod(Color.Black,...)}
if (3) {myMethod(Color.Ignore,...)} so here just ignore this color parameter and keep the original.
像这样的东西:
Color? color = Colour.Black;
// `color` can be set to `null` or a valid `System.Drawing.Color`
// the followin line will work for both
myMethod(color,...);
神奇的是,任何可空类型可以隐含从其下面的类型的实例转换。您不需要if/else语句或强制将Color
实例传递给接受Color?
的方法,运行时将为您执行此操作。这同样适用于传递null
值。
难道你不能获得目前的颜色或缓存吗?也许你应该考虑将方法分成多个部分 –
你可以使用'null'吗? – Sam
你可以使它成为一个空的类型,'Color?' – SJuan76