这应该是一个简单的问题,希望是一个简单的答案 我正在尝试编写一个带有2个参数的委托,但编译器不接受它。
当我使用一个参数时,它可以工作,例如:
var addCar = new Action<string>(number =>
{ } );
但是当我使用2个参数时,编译器抱怨他不知道参数'number' 我试过的代码就是这个
var addCar = new Action<string, decimal>(number, test =>
{ } );
错误是“名称'数字'在当前上下文中不存在”
我不知道创建具有2个参数的委托的确切语法,所以我希望有人可以帮助我。
答案 0 :(得分:3)
为了让编译器知道,
是属于构造函数调用还是属于委托的方法签名,您应该在委托签名周围添加括号:
var addCar = new Action<string, decimal>((number, test) => { } );
现在它将代理读取为
(number, test) => { }
而不是
test => { }
答案 1 :(得分:1)
我的Action
任务的三种变体。
private void AddCarMethod(string number, decimal test)
{
// TODO
}
private void AddCarMethod(string number)
{
// TODO
}
public void Test()
{
// variant 1 (lambda)
var addCar1 = new Action<string, decimal>((number, test) => { /* TODO */ });
// variant 2 (method reference)
Action<string, decimal> addCar2 = (number, test) => AddCarMethod(number, test);
// variant 2.1 (method reference short form)
var addCar2short = new Action<string, decimal>(AddCarMethod);
// variant 3 (with missing parameter)
Action<string, decimal> addCar3 = (number, test) => AddCarMethod(number);
addCar3("X007", 5);
}