C# 动态调用两个方法之一

C# 动态调用两个方法之一,c#,C#,有没有一种方法可以转换这个if/else语句,以便在不使用反射的情况下以更动态的方式调用它 if (left.IsColliding()) directions.Remove(Direction.Left); else directions.Add(Direction.Left); 在JavaScript中,我可以执行以下操作,我想知道C#中是否有类似的东西 在C#中不可能 你的代码有什么问题?它很好而且简单 javascript版本既丑陋又有问题,因为使用硬编码的字符串来调用方法是潜在的错误

有没有一种方法可以转换这个if/else语句,以便在不使用反射的情况下以更动态的方式调用它

if (left.IsColliding()) directions.Remove(Direction.Left);
else directions.Add(Direction.Left);
在JavaScript中,我可以执行以下操作,我想知道C#中是否有类似的东西

在C#中不可能

你的代码有什么问题?它很好而且简单

javascript版本既丑陋又有问题,因为使用硬编码的字符串来调用方法是潜在的错误源,而且无法维护

但你可以这样写:

switch ( left.IsColliding() )
{
  case true:
    directions.Remove(Direction.Left);
    break;
  case false:
    directions.Add(Direction.Left);
    break;
}
看看
Func

它让您定义一个函数,然后在以后调用它


因此,您可以将带有字符串的函数作为键删除并添加到
字典三元运算符必须返回某些内容。您可以执行类似的操作以返回具有所需效果的
操作
委托:

int a = 5;
int b = 10;
(a == b ? (Action)doThis : doThat)();

其中,
doThis
doThat
是方法。

有许多可用的源代码混淆器,可以更彻底、更有效地实现相同的效果。这可能更适合于。@EdPlunkett好的,谢谢。如果您有一个大的逻辑序列,也许责任链模式概念的一个简单应用会有所帮助。鉴于OP的问题本质上是一个混淆代码的方法的请求,我认为这是OP提问的合理答案。酷。谢谢你安慰我不安全的自我这可能是一个很好的解决方案:它可以编译,并且在可读性和可维护性方面具有预期的效果。但是,它需要进行调整,以调用
directions
集合上的实例方法。与其复制其他人对类似问题的答案,不如投票将此问题作为副本关闭(此答案是:)我认为OP所寻找的不仅仅是任何旧的坏代码,但糟糕的代码特别脆弱、晦涩、简洁。我认为最后三个要求在这里都没有得到满足。转换是个笑话……我的评论也是。
int a = 5;
int b = 10;
(a == b ? (Action)doThis : doThat)();