为了账号安全,请及时绑定邮箱和手机立即绑定

动态调用两个方法之一

动态调用两个方法之一

PHP
跃然一笑 2024-01-20 15:40:13
有没有办法转换这个 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;

}


查看完整回答
反对 回复 2024-01-20
?
慕哥9229398

TA贡献1877条经验 获得超6个赞

看一下Func<T, TResult>

它让您可以定义一个函数,然后稍后调用它。

因此,您可以将字符串中的“Remove”和“Add”函数作为Dictionary<string, Func<T, TResult>.

您可以使用与 JavaScript 相同的语法来使用三元。所以你只需使用它而不是 if 语句。

查看完整回答
反对 回复 2024-01-20
?
慕运维8079593

TA贡献1876条经验 获得超5个赞

三元运算符必须返回一些东西。您可以执行类似的操作来返回Action具有您正在寻找的效果的委托:


int a = 5;

int b = 10;

(a == b ? (Action)doThis : doThat)();

其中doThis和doThat是方法。


查看完整回答
反对 回复 2024-01-20
  • 3 回答
  • 0 关注
  • 42 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信