如何用2个参数编写委托

时间:2015-06-02 07:44:36

标签: c# delegates syntax-error

这应该是一个简单的问题,希望是一个简单的答案 我正在尝试编写一个带有2个参数的委托,但编译器不接受它。

当我使用一个参数时,它可以工作,例如:

var addCar = new Action<string>(number => 
{ } );

但是当我使用2个参数时,编译器抱怨他不知道参数'number' 我试过的代码就是这个

var addCar = new Action<string, decimal>(number, test => 
{ } );

错误是“名称'数字'在当前上下文中不存在”

我不知道创建具有2个参数的委托的确切语法,所以我希望有人可以帮助我。

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);
}