快速简单的问题:
如何使用大量颜色制作开关/盒子 .
我能做的是:
if(color == Color.Red)
color = Color.Green;
else
{
if(color == Color.Green)
color = Color.Blue;
else
{
// ...
}
}
或者我可以使用旧/新颜色来替换它们(在此特定示例中,除了指定新颜色之外,不需要额外的工作) .
或者我可以使用tmp变量,因此它变为(但在这种特定情况下):
Color tmp = Color.Transparent; // or whatever
if(color == Color.Red)
tmp = Color.Green;
if(color == Color.Green)
tmp = Color.Blue;
//...
color = tmp;
我想要的是类似的东西
switch(color)
{
case Color.Red:
// ...
break;
case Color.Green:
// ...
break;
case Color.Blue:
// ...
break;
}
我发现this有趣的文章,我可能决定使用它 .
或者我在想类似的东西
switch(color.ToArgb())
{
case 129381038: // Color.Red?? how to put it here nicely?
// ...
}
你们认为哪个更好?
4 回答
使用字典代码更少,更灵活,因为您可以从配置文件或数据库加载它 . 如果需要更改映射,则无需重建代码 .
我认为在你的情况下,KnownColor enum会完成这项工作,但是这里的颜色受到限制
我绝对认为使用字典将是最好的方法 .
但是,如果您真的喜欢switch语句,可以使用
Color.Name
并启用它 .Color.Name
将返回颜色的已知名称(如果有),如果不是,则返回颜色的十六进制argb代码 .这里's some sample code that demonstrates both approaches. I' m使用
Lazy<>
来初始化颜色/动作映射器以避免任何潜在的线程问题:如果你已经修改了使用switch语句,你可以执行以下操作来结合相对容易的编码/人类可读性: