C# 在下面的代码中简化Switch语句
如何使此代码的大小更小、效率更高:)。。?。 我已经从一个更大的旧代码发展到现在,但我认为它仍然是巨大的C# 在下面的代码中简化Switch语句,c#,switch-statement,code-size,C#,Switch Statement,Code Size,如何使此代码的大小更小、效率更高:)。。?。 我已经从一个更大的旧代码发展到现在,但我认为它仍然是巨大的 if (affix == Mod.Affix) { Graphics.DrawText(text, textSize, position, Color.White); switch (levels) { case 1: { Size level = Graphics.DrawText(text, textSiz
if (affix == Mod.Affix)
{
Graphics.DrawText(text, textSize, position, Color.White);
switch (levels)
{
case 1:
{
Size level = Graphics.DrawText(text, textSize, position, Color.Yellow);
if (level != new Size())
{
position.Y += level.Height;
}
} break;
case 2:
{
Size level = Graphics.DrawText(text, textSize, position, Color.Red);
if (level != new Size())
{
position.Y += level.Height;
}
} break;
case 3:
{
Size level = Graphics.DrawText(text, textSize, position, Color.Green);
if (level != new Size())
{
position.Y += level.Height;
}
} break;
default:
Size nextLevel = Graphics.DrawText(text, textSize, position, Color.Black);
if (nextLevel != new Size())
{
position.Y += nextLevel.Height;
}
break;
}
}
提前谢谢你 试试这样的方法:
Color color = new Color();
switch (levels)
{
case 1:
color = Color.Yellow;
break;
case 2:
color = Color.Red;
break;
case 3:
color = Color.Green;
break;
default:
color = Color.Black;
break;
}
Size level = Graphics.DrawText(text, textSize, position, color);
if (level != new Size()) // ???
{
position.Y += level.Height;
}
您对每种颜色都使用相同的代码,请尝试以下操作:
switch (levels)
{
case 1:
AddHeight(Color.Yellow);
break;
case 2:
AddHeight(Color.Red);
break;
case 3:
AddHeight(Color.Green);
break;
default:
AddHeight(Color.Black);
break;
}
public void AddHeight(Color color){
Size level = Graphics.DrawText(text, textSize, position, color);
if (level != new Size()) // ???
{
position.Y += level.Height;
}
}
使用字典将级别映射到颜色:
private static Dictionary<int, Color> levelColors = new Dictionary<int, Color>
{
{ 1, Color.Yellow },
{ 2, Color.Red },
{ 3, Color.Green }
};
这样,您不需要在添加/更改级别颜色时修改方法,只需更新字典。您可以有一个预定义的“级别颜色”映射,如(例如在静态构造函数中初始化):
if (affix == Mod.Affix)
{
Graphics.DrawText(text, textSize, position, Color.White);
Size level =
(levels == 1) ? Graphics.DrawText(text, textSize, position, Color.Yellow)
:((levels == 2) ? Graphics.DrawText(text, textSize, position, Color.Red)
: ((levels == 3) ? Graphics.DrawText(text, textSize, position, Color.Green)
: Graphics.DrawText(text, textSize, position, Color.Black)));
if (level != new Size())
{
position.Y += nextLevel.Height;
}
}
如果(level!=new Size()),您在执行
操作时试图完成什么?@Matias Cicero-将文本对齐到同一位置。在案例1-3中,您只需要维护颜色。其余的代码可以移到开关外,这很快就会变得难以读取,嵌套的三元运算符是相当邪恶的!是的,我同意,但他要求更短——出于可读性的原因,我不喜欢short。我认为我的解决方案对于他的特定场景来说是可读的,因为只有4个案例。如果它更大,我会提出一些不同的建议。我的观点是,我看重可读性而不是行数。这种模式肯定会变得混乱,但在这种情况下似乎仍然合适。这看起来是最好的解决方案,如果需要,我可以在以后添加更多级别。非常感谢。
if (affix == Mod.Affix)
{
Graphics.DrawText(text, textSize, position, Color.White);
Size level =
(levels == 1) ? Graphics.DrawText(text, textSize, position, Color.Yellow)
:((levels == 2) ? Graphics.DrawText(text, textSize, position, Color.Red)
: ((levels == 3) ? Graphics.DrawText(text, textSize, position, Color.Green)
: Graphics.DrawText(text, textSize, position, Color.Black)));
if (level != new Size())
{
position.Y += nextLevel.Height;
}
}
Dictionary<int,Color> _levelToColor = new Dictionary<int,Color>();
_levelToColor.Add(1, Color.Yellow);
_levelToColor.Add(2, Color.Red);
_levelToColor.Add(3, Color.Green);
Color color = _levelToColor.ContainsKey( level ) ? _levelToColor[level] : Color.Black;
Size level = Graphics.DrawText(text, textSize, position, color);
position.Y += level.Height;