有没有办法转换这个 if/else 语句,以便可以在不使用反射的情况下以更动态的方式调用它?if (left.IsColliding()) directions.Remove(Direction.Left);
else directions.Add(Direction.Left);在 JavaScript 中我可以执行以下操作,我想知道 C# 中是否有类似的操作。directions[left.IsColliding() ? "Remove" : "Add"](Direction.Left);
3 回答
小怪兽爱吃肉
TA贡献1852条经验 获得超1个赞
在 C# 中不可能。
你的代码有什么问题吗?它很好而且很简单。
javascript 版本丑陋且存在问题,因为使用硬编码的字符串来调用方法是潜在的错误来源,并且无法维护。
但你可以这样写:
switch ( left.IsColliding() )
{
case true:
directions.Remove(Direction.Left);
break;
case false:
directions.Add(Direction.Left);
break;
}
慕哥9229398
TA贡献1877条经验 获得超6个赞
看一下Func<T, TResult>
它让您可以定义一个函数,然后稍后调用它。
因此,您可以将字符串中的“Remove”和“Add”函数作为Dictionary<string, Func<T, TResult>
.
您可以使用与 JavaScript 相同的语法来使用三元。所以你只需使用它而不是 if 语句。
慕运维8079593
TA贡献1876条经验 获得超5个赞
三元运算符必须返回一些东西。您可以执行类似的操作来返回Action具有您正在寻找的效果的委托:
int a = 5;
int b = 10;
(a == b ? (Action)doThis : doThat)();
其中doThis和doThat是方法。
- 3 回答
- 0 关注
- 124 浏览
添加回答
举报
0/150
提交
取消