0 c#
switch (Rotation.ToString())
{
case (-Math.PI / 2).ToString():
// some code
break;
}
Run Code Online (Sandbox Code Playgroud)
编译器抱怨说(-Math.PI / 2).ToString(),"预期值为常量"这不是常数吗?
没有方法调用是常量值.
顺便说一句,既然Math.PI是a double,你可能不想像在这里那样在"平等"比较中使用它; 有充分证明的陷阱.
单个测试的更好方法是:
var target = -Math.PI / 2;
if (Math.Abs(Rotation - target) < 0.0001) {
// some code
}
Run Code Online (Sandbox Code Playgroud)
如果有很多分支,没有进入委托区域,你可以这样做:
var specialCases = new[] { -Math.PI, -Math.PI / 2 };
var epsilon = 0.001d;
var index = specialCases.Select((d, i) => Math.Abs(Rotation - d) < epsilon ? i : -1)
.Where(i => i != -1).DefaultIfEmpty(-1).First();
switch (index) {
case 0: // -Math.PI
break;
case 1: // -Math.PI / 2
break;
default: // No match
break;
}
Run Code Online (Sandbox Code Playgroud)
不是LINQ的最佳用途,但它可以让你以switch最少的修补回到领土.