Python 的 functools.partial 的 C# 等价物是什么?

What is C# equivalent of Python's functools.partial?

在python中我们有一个functools.partial机制。什么是有效的 C# 等价物?

对于那些不熟悉这个概念的人,我正在寻找一般情况,但它可以是任何东西,甚至:

def add(a: int, b: int):
    return a + b

add_to_one = partial(add, 1)
add_to_one(2)  # This will return 3

根据您的示例,我能想到的最接近的是 Func delegate

这提供了一种基于几乎任何东西定义局部函数的方法。在这种情况下,它是在本地 Main 范围内定义的。

用法:

using System;
                    
public class Program
{
    public static void Main()
    {
       // Func<,> type: input is 'int', output will be 'int'
       // 'c' = input argument.
       // '=>' indicates what will be done with it.  
       Func<int,int> add_to_one = (c) => Add(c,1);

       //call 'add_to_one' as a normal method.
       int result = add_to_one(2);
       
       Console.WriteLine(result);
    }
    
    //example method
    public static int Add(int a, int b)
    {
        return a + b;
    }
}

输出:

3

至于一般情况:

Return a new partial object which when called will behave like func called with the positional arguments args and keyword arguments keywords. If more arguments are supplied to the call, they are appended to args.

这部分已涵盖。您将拥有一个行为类似于 method/function.

的可调用变量

至于这个:

If additional keyword arguments are supplied, they extend and override keywords.

有可能,构造可扩展到更多的输入变量,例如:

// 3 inputs
// output is string
Func<int,string,double,string> foo = (i,s,d) => $"int: {i}, string: {s}, double {d}";