C# 如何使用附加参数从另一个创建动作?

C# 如何使用附加参数从另一个创建动作?,c#,.net,C#,.net,在.Net Framework中是否有一个类可以像下面示例中的EnhancedAction那样包装一个动作和另一个参数 private void Test(string s) { // I would like : // Method1(EnhancedAction.Create(Method2, s)); // But I must write : Method1(i => Method2(i, s)); } private void Method1(Action&l

在.Net Framework中是否有一个类可以像下面示例中的EnhancedAction那样包装一个动作和另一个参数

private void Test(string s)
{
  // I would like :
  // Method1(EnhancedAction.Create(Method2, s));

  // But I must write :
  Method1(i => Method2(i, s));
}

private void Method1(Action<int> myAction)
{
  myAction(1);
}

private void Method2(int i, string s)
{

}
专用无效测试(字符串s)
{
//我想:
//方法1(EnhancedAction.Create(方法2,s));
//但我必须写:
方法1(i=>方法2(i,s));
}
私有无效方法1(操作myAction)
{
我的行动(1);
}
私有void方法2(int i,字符串s)
{
}

您已经演示了如何编写代码;您只需创建自己的类,该类具有实现所需方法的精确解决方案:

class EnhancedAction
{
    public static Action<T1> Create<T1, T2>(Action<T1, T2> action, T2 parameter2)
    {
        return parameter1 => action(parameter1 , parameter2);
    }
}
类增强
{
公共静态动作创建(动作动作,T2参数2)
{
返回参数1=>action(参数1,参数2);
}
}

虽然我看不出这比直接使用lambda更容易写出来。

我找到了一把雨伞,它提供了我想要的东西:


尽管最近它似乎不是很活跃。

lambda解决方案是否比您提出的备选方案更简单?使用备选方案,您可以想象使用允许简洁语法的扩展方法,如:action。作为此代码的读者,如果使用AdditionalParam,我仍然希望看到lambda调用该方法。我更清楚地知道发生了什么事。对于该方法调用,读者并不清楚要替换哪个参数,例如,除了没有真正节省空间之外。我不同意,在框架或任何开源第三方库中都没有这样的工具?(我宁愿不写它)@romainhatefeuille为什么框架或开源第三方库需要编写一个简单到可以为您实现的单行方法?如果你需要,你可以自己写。正如我在对你的问题的评论中所描述的,我不认为这是有用的;如果你想使用它,直接前进,它是非常容易写的,但是我不认为这里增加了价值。因为这样的工具存在于其他语言(例如C++ + Boost绑定)中。因为如果我想处理行动,我需要再写一遍?因为让它成为每个人的标准会很酷吗?另外,我不认为你的单线方法是可以接受的:Enumerable.AsEnumerable()也是单线方法,但它包含在框架中;甚至action.WithAdditionalParam不是一个完美的语法。但是使用C#6中的静态导入,它可以简化为:Method1(Bind(Method2,s))。它映射到众所周知的Boost语法。