C#使用操作作为参数

dka*_*zon 3 c#

我正在尝试创建一个函数,我可以给它一个操作> < == !=等.我想知道是否有可能将其中一个设置为函数的参数,

即: UseOperator("test", >, 0)

如果不是最好的办法来处理这样的事情?也许是一个枚举?

Jon*_*eet 10

最自然的方法是传递一个代表,即IMO,例如类型Func<int, int, bool>.遗憾的是,您无法将运算符直接转换为委托 - 但您可以非常简单地编写方法并使用方法组转换:

public void UseOperator(string name, Func<int, int, bool> op, int value)
{
    ...
}

public static bool GreaterThan(int x, int y, value)
{
    return x > y;
}

UseOperator("test", GreaterThan, 0);
Run Code Online (Sandbox Code Playgroud)

Marc Gravell 在MiscUtil中泛型运算符的研究可能对您有用.


Dar*_*rov 5

这是不可能的,但您可以使用函数委托:

UseOperator("test", (x, y) => x > y, 0);
Run Code Online (Sandbox Code Playgroud)