同时通过Action委托作为参数构造函数参数错误(Argument error while pass

2019-09-28 07:55发布

我试图通过行动代表一起构造,但得到以下错误:

委托“行动”不带参数0

代码:

public sealed class VariantProcessor
{
    private string _myAppConnectionString { get; set; }
    private readonly Action<Variant> _transform;
    public Variant(string _myAppConnectionString,Action<Variant> transform)
    {
         _myAppConnectionString = _myAppConnectionString;
         _transform = transform;
    }
    public void Process(Variant model)
    {
        try
        {
            _transform(model);
             //version creation shared by both the derived types
        }
        catch (Exception) 
        {
        }
    }
}

public class AggregateCalculator : IVariantProcessor
{
    private string _myAppConnectionString { get; set; }
     public void Process(Variant model)
     {
            _myAppConnectionString = ConfigurationManager.ConnectionStrings["dbConnectionString"].ConnectionString;
            new VariantProcessor( _myAppConnectionString,
               () => Transform(model) //error
               );
     }
    private void Transform(Variant model)
    {
        //logic on variant model
    }
}

我想这样很好,但仍然没有运气:

new VariantProcessor(_myAppConnectionString,
                   Transform(model) // error
                    );

其实我有问题,理解这个语法() => Transform(model) ,因此,我没有得到什么问题在这里。

有人可以帮我找出什么问题吗?

Answer 1:

Action的是你的构造需要的是一个Action<Variant>这意味着它是一个一段代码,采用类型的单个参数Variant并返回void(因为Action不返回任何东西。

当你调用构造函数,你可以将它传递一个lambda,需要一个单一的参数如下:

new VariantProcessor(_myAppConnectionString, model => Transform(model));

或者,你可以通过它,需要一个函数的名称Variant ,并返回void

new VariantProcessor(_myAppConnectionString, Transform);

语法:

() => Transform(model)

意味着需要零个参数(这是该拉姆达()指。 您需要提供一个lambda接受单个参数。 你可以写,要么为:

model => Transform(model)

要么

(model) => Transform(model)

当你有一个拉姆达这需要一个以上的参数,那么你必须把它们放在括号内。



Answer 2:

尝试使用下面的代码。 你需要通过在lemda参数

public class AggregateCalculator : IVariantProcessor
{
    private string _myAppConnectionString { get; set; }
     public void Process(Variant model)
     {
            _myAppConnectionString = ConfigurationManager.ConnectionStrings["dbConnectionString"].ConnectionString;
            new VariantProcessor( _myAppConnectionString,
               (o) => Transform(model)
               );
     }
    private void Transform(Variant model)
    {
        //logic on variant model
    }
}


文章来源: Argument error while passing Action delegate as parameter to constructor
标签: c# delegates