如何传递空值颜色

akd*_*akd 3 c# null

我只是想知道如何将null颜色传递给方法.

下面是一个获取颜色参数的方法的示例:

protected void myMethod(Color color,other parameters...) {}
Run Code Online (Sandbox Code Playgroud)

现在我正在使用显示的条件.根据这种情况,我想改变颜色.

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.
Run Code Online (Sandbox Code Playgroud)

我知道我可以做很多事情来克服这个问题,但正如我所说,我只是想知道是否有更好的传递忽略值的方法,所以它将使用元素的原始颜色.

Dav*_*son 10

关于什么:

protected void myMethod(Color? color,other parameters...) {}
Run Code Online (Sandbox Code Playgroud)

哪个颜色?可以为空,因此您可以传递null并检查方法中的值.如果color == null则保留原文?

  • +1.这正是Nullable <T>类的用途,以避免使用Color.Ignore或Color.Transparent等魔术值.或者更糟糕的是,选择一些丑陋的颜色,没有人会想要并将其作为神奇的价值. (2认同)

Ser*_*kiy 6

如果你想使用默认值,那么创建一个不需要颜色的方法的重载并调用它(如果你不打算在方法中使用它而不是将null值传递给方法,最好不要提供参数):

protected void myMethod(other parameters...)
Run Code Online (Sandbox Code Playgroud)

另外我建议你把可选参数放到参数的末尾:

protected void myMethod(other parameters..,  Color color)
Run Code Online (Sandbox Code Playgroud)

码:

switch(value)
{
   case 1: myMethod(..., Color.Red); break;
   case 2: myMethod(..., Color.Black); break;
   case 3: myMethod(...); break;
}
Run Code Online (Sandbox Code Playgroud)

您甚至可以要求编译器为您制作"重载"(请参阅​​注释):

protected void myMethod(other parameters..,  Color color = {DefaultColor})
Run Code Online (Sandbox Code Playgroud)

注意:我喜欢避免任何令人困惑的代码.比如打电话

DrawPoint(10, 20, null)
Run Code Online (Sandbox Code Playgroud)

看起来很混乱我.什么是null?如果没有人能够在方法中使用它,为什么你传递null?以下电话看起来更好

DrawPoint(10, 20) 
Run Code Online (Sandbox Code Playgroud)

它不会使调用者与传递不会被使用的参数混乱.我不需要考虑是什么null意思.但即使在这种情况下,我们也知道一些其他开发人员仍然无法获得的信息 - 我们使用默认颜色绘制点,而方法并没有说明任何信息.所以,我会用另一种方法

DrawPointWithDefaultColor(10, 20)
Run Code Online (Sandbox Code Playgroud)

完全没有混淆.

  • 优秀.希望他采用这种解决方案,而不是"空"类型的解决方法. (2认同)