2015-06-02 3 views
0

Это должен быть простой вопрос, с надеждой, простой ответ.
Я пытаюсь написать делегат, который принимает 2 параметра, но компилятор его не принимает.как написать делегат с двумя параметрами

Когда я использую один параметр это работает, пример:

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

, но когда я использую 2 параметра жалоб компилятора, что он не знает, аргумент «номер» Код я попытался это

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

ошибка «имя„номер“не существует в текущем контексте»

Я не знаю точный синтаксис для создания делегата с 2, поэтому я надеюсь, что кто-то может мне помочь.

+5

параметры списка в скобках: 'вар addCar = новый Action <строка десятичного> ((число, тест) => {});' – ASh

+0

Простой ответ на простой вопрос, работает отлично, спасибо – GuidoG

ответ

3

Для того, чтобы компилятор, чтобы знать, если , принадлежит к вызову конструктора или метода подписи делегата, вы должны добавить скобки вокруг делегата подписи:

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

Теперь он читает делегат как

(number, test) => { } 

вместо

test => { } 
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); 
} 
Смежные вопросы