c# - 动态调用两种方法之一
问题描述
有没有办法转换这个 if/else 语句,以便可以在不使用反射的情况下以更动态的方式调用它?
if (left.IsColliding()) directions.Remove(Direction.Left);
else directions.Add(Direction.Left);
在 JavaScript 中,我可以执行以下操作,我想知道 C# 中是否有类似的东西。
directions[left.IsColliding() ? "Remove" : "Add"](Direction.Left);
解决方案
看一下Func<T, TResult>
它让您必须定义一个函数,然后在以后调用它。
因此,您可以将字符串 Remove 和 Add 作为Dictionary<string, Func<T, TResult>
.
您可以使用与 JavaScript 中提到的相同语法的三元组。所以你只需使用它而不是你的 if 语句。
https://docs.microsoft.com/en-us/dotnet/api/system.func-2?view=netframework-4.8
我想我正在回答你的问题,但根据你问题中的一些评论(我目前无法评论),我有点担心我没有。
推荐阅读
- python - send_keys 选择了错误的选项 [selenium python]
- python - 用于多个输入变量的 JAX 自定义 VJP 函数不适用于 NumPyro/HMC-NUTS
- python-3.x - 如何在 CSV 文件 python-3 中查找字符串
- python - Python电报机器人(Telebot)
- c# - .Net Core 不路由到 POST 方法,但 GET 方法有效
- php - Swagger UI Access-Control-Allow-Origin 错误
- python - 右键单击-Selenium - Python
- asp.net - ASP.NET MVC Razor SQL 表
- javascript - DiscordJS 在线会员数
- html - 如何仅以纯文本 (HTML) 形式发送 HTTP 响应