gpt4 book ai didi

c# - 运算符作为 C# 中的方法参数

转载 作者:数据小太阳 更新时间:2023-10-29 06:53:45 26 4
gpt4 key购买 nike

我认为在 C# 3.0 中不可能将运算符用作方法的参数,但有没有一种方法可以模拟它或一些语法糖,使它看起来像是正在发生的事情?

我问是因为我最近实现了 the thrush combinator in C#但在翻译时 Raganwald's Ruby example

(1..100).select(&:odd?).inject(&:+).into { |x| x * x }

Which reads "Take the numbers from 1 to 100, keep the odd ones, take the sum of those, and then answer the square of that number."

我没有达到 Symbol#to_proc东西。这就是上面 select(&:odd?)inject(&:+) 中的 &:。

最佳答案

好吧,简单来说,您可以只使用 lambda:

public void DoSomething(Func<int, int, int> op)
{
Console.WriteLine(op(5, 2));
}

DoSomething((x, y) => x + y);
DoSomething((x, y) => x * y);
// etc

虽然这不是很令人兴奋。为我们预先构建所有这些代表会很好。当然,您可以使用静态类来做到这一点:

public static class Operator<T>
{
public static readonly Func<T, T, T> Plus;
public static readonly Func<T, T, T> Minus;
// etc

static Operator()
{
// Build the delegates using expression trees, probably
}
}

事实上,Marc Gravell 有 done something very similarMiscUtil ,如果你想看的话。然后你可以调用:

DoSomething(Operator<int>.Plus);

它不是很漂亮,但我相信它是目前支持的最接近的。

恐怕我真的不了解 Ruby 的东西,所以我不能对此发表评论......

关于c# - 运算符作为 C# 中的方法参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1528319/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com