首页 > 解决方案 > 动态调用两种方法之一

问题描述

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

if (left.IsColliding()) directions.Remove(Direction.Left);
else directions.Add(Direction.Left);

在 JavaScript 中,我可以执行以下操作,我想知道 C# 中是否有类似的东西。

directions[left.IsColliding() ? "Remove" : "Add"](Direction.Left);

标签: c#

解决方案


看一下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

我想我正在回答你的问题,但根据你问题中的一些评论(我目前无法评论),我有点担心我没有。


推荐阅读