如果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 条件
if (color == null) ...
至
if (color == Color.Transparent) ...
更新
澄清问题后,我得到了更好的预期结果,假设您已将 重构myMethod
为 acceptColor?
而不是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
值。