C# 将动作委托作为参数传递给构造函数时发生参数错误
我试图将带有的操作委托传递给构造函数,但出现以下错误: 委托“操作”不接受0个参数 代码: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
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-不,你说得对,它需要去上课。