C# 将动作委托作为参数传递给构造函数时发生参数错误

C# 将动作委托作为参数传递给构造函数时发生参数错误,c#,delegates,C#,Delegates,我试图将带有的操作委托传递给构造函数,但出现以下错误: 委托“操作”不接受0个参数 代码: public sealed class VariantProcessor { private string _myAppConnectionString { get; set; } private readonly Action<Variant> _transform; public Variant(string _myAppConnectionString,Actio

我试图将带有的操作委托传递给构造函数,但出现以下错误:

委托“操作”不接受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
    }
}
事实上,我在理解这个语法时遇到了问题
()=>Transform(model)
,因此我不明白这里的问题是什么


有人能帮我找出这里的问题吗?

构造函数执行的
操作
是一个
操作
,这意味着它是一段代码,使用类型为
Variant
的单个参数并返回void(因为
操作
不返回任何内容)

调用构造函数时,可以向其传递一个lambda,该lambda接受如下单个参数:

new VariantProcessor(_myAppConnectionString, model => Transform(model));
或者,您可以将函数名传递给它,该函数接受
变量
,并返回
void

new VariantProcessor(_myAppConnectionString, Transform);
语法:

() => Transform(model)
表示采用零参数的lambda(即
()
)的意思。您需要提供采用单个参数的lambda。您可以将其编写为:

model => Transform(model)


如果lambda接受多个参数,则必须将它们放在括号内。

构造函数执行的
操作是
操作
,这意味着它是一段代码,它接受类型为
Variant
的单个参数并返回void(因为
操作
不会返回任何内容

调用构造函数时,可以向其传递一个lambda,该lambda接受如下单个参数:

new VariantProcessor(_myAppConnectionString, model => Transform(model));
或者,您可以将函数名传递给它,该函数接受
变量
,并返回
void

new VariantProcessor(_myAppConnectionString, Transform);
语法:

() => Transform(model)
表示采用零参数的lambda(即
()
)的意思。您需要提供采用单个参数的lambda。您可以将其编写为:

model => Transform(model)


如果lambda包含多个参数,则必须将它们放在括号内。

尝试使用以下代码。需要在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
    }
}

尝试使用以下代码。您需要在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
    }
}

感谢您对我的帮助,非常好的回答和解释。非常好。当我这样做时:Transform,那么代理如何将变量模型作为参数,因为我没有指定方法anything@ILoveStackoverflow-我不明白这个问题?你有一个接受参数的委托。是的,我知道了。你认为让Action delegate接受泛型参数而不是具体类有意义吗?@ILoveStackoverflow-不,你说得对,它需要一个类。感谢你对我的帮助和非常好的回答和解释。非常好。当我这样做时:转换,那么delegate如何接受变量model作为参数,因为我没有指定方法anything@ILoveStackoverflow-我不明白这个问题?你有一个接受参数的委托。是的,我知道了。你认为让Action委托接受泛型参数而不是具体类有意义吗?@ILoveStackoverflow-不,你说得对,它需要去上课。