2014-11-30 4 views
-4

Ну, искал это, но, поскольку я не могу быть более конкретным, Google кажется не в ответе, поэтому я решил спросить здесь.C# Создание массива методов

В любом случае, чтобы создать массив методов, который возвращает значение?

Как

methodArray[0].Invoke(); 

Могу ли я использовать делегат? Если да, то как?

как если у меня есть 2 методы, которые нужны одни и те же параметры

dobule Add(double number) 
{ 
//code 
} 
double Remove(double number) 
{ 
//code 
} 

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

+0

Ни один из них не похоже на работу для меня. – user1926930

+3

Вам нужно будет показать свой код и сообщить нам, каким образом он не работает. Вопрос/ответы, на которые я ссылался, рассказывают, как это сделать. – hatchet

+0

Действие является делегатом, и я не могу использовать его со списком <> и действием [] – user1926930

ответ

3

Вы можете создайте массив из Func s. Однако это ограничивается методами, в которых все имеют одну и ту же подпись (тип возврата и число и тип параметров).

Если у вас есть несколько методов, которые не принимают каких-либо параметров, которые вы можете использовать его как это:

var methods = new List<Func<T>>(); 

где T является наименьшим общим объектом в возвращаемом значении, которое может быть просто object.

var methods = new List<Func<object>>(); 

Если вы просто хотите вызвать void методы, или не беспокоитесь о типе возвращаемого, вы можете использовать вместо Action:

var methods = new List<Action>(); 

В любом случае, вы можете вызывать их так:

foreach(var method in methods){ 
    var result = method(); 
    //or if you don't care about return type 
    method(); 
} 

Вы также можете найти этот пост полезным: How do you use Func<> and Action<> when designing applications?

ОБНОВЛЕНО В приведенном ниже примере показано, как можно использовать эту технику с методом Add и Remove:

public double Add(double number) { return 0;} 
    public double Remove(double number) { return 0; } 

    public void Example() 
    { 
     //Array of methods 
     var methods = new Func<double, double>[] 
     { 
      n => Add(n), 
      n => Remove(n) 
     }; 

     //Invoking methods 
     var number = 0d; 
     foreach (var method in methods) 
     { 
      method(number); 
     } 
    } 
+0

Использование универсального типа 'System.Action ' требует 1 аргумент типа \t Это ошибка. – user1926930

+0

Затем используйте не общее «действие», если вам не нужно передавать параметры метода –

+0

объясните, может быть, еще? не общий? – user1926930

Смежные вопросы