spriteManager是我所拥有的外部类的一个实例,要访问PlayerHelath和selectedFrameOffset,我必须重新开始:spriteManager。很多次。
if (spriteManager.PlayerHealth == 3)
spriteManager.selectedFrameOffset = 0;
else if (spriteManager.PlayerHealth == 2)
spriteManager.selectedFrameOffset = 30;
else if (spriteManager.PlayerHealth == 1)
spriteManager.selectedFrameOffset = 60;
else if (spriteManager.PlayerHealth == 0)
spriteManager.selectedFrameOffset = 90;
我是否有机会参考spriteManager的使用。只有一次并最终得到这个:代码,以获得更多的可读性?
if (PlayerHealth == 3)
selectedFrameOffset = 0;
else if (PlayerHealth == 2)
selectedFrameOffset = 30;
else if (PlayerHealth == 1)
selectedFrameOffset = 60;
else if (PlayerHealth == 0)
selectedFrameOffset = 90;
答案 0 :(得分:7)
spriteManager.selectedFrameOffset = GetFrameOffset(spriteManager.PlayerHealth);
获得偏移是简单的开关
private int GetFrameOffset(int playerHealth)
{
switch(playerHealth)
{
case 3: return 0;
case 2: return 30;
case 1: return 60;
// etc
default:
throw new ArgumentException();
}
}
考虑将此逻辑移至SpriteManager
类。例如。您可以根据当前的健康值计算selectedFrameOffset
属性:
public int selectedFrameOffset
{
get
{
switch(PlayerHealth)
{
case 3: return 0;
case 2: return 30;
case 1: return 60;
// etc
default:
throw new ArgumentException();
}
}
}
由于@daryal注意到if..else块中的隐藏逻辑,我会在SpriteManager
类中使用以下解决方案:
private const int frameOffset = 30;
public int SelectedFrameOffset
{
get
{
if (PlayerHealth <= 3)
return (3 - PlayerHealth) * frameOffset;
return defaultValue; // or throw
}
}
答案 1 :(得分:3)
spriteManager.selectedFrameOffset = GetFrameOffset(spriteManager.PlayerHealth);
private int GetFrameOffset(int playerHealth)
{
return (3 - playerHealth) * 30;
}
答案 2 :(得分:1)
在VB.net中你可以这样做:
Dim theCustomer As New Customer
theCutomer.Name = "Paul"
theCutomer.City = "New York"
// or alternativly:
With theCustomer
.Name = "Paul"
.City = "New York"
End With
但是在C#中无法做到这一点。 在C#中,您可以使用较短的变量名称:
SpriteManager sp = new SpriteManager();
sp.selectedFrameOffset = 90;
或使用switch
优化您的代码 - 状态等等,如谢尔盖所示。