2015-07-09 5 views
0

Я искал какое-то время, как я могу сделать эту работу. Например:C# Как передать функцию в качестве аргумента?

CheckPerformance(***Loop***);  

    private void CheckPerformance(***Function myFunctionName***) 
    { 
     sw.Start(); 
     myFunctionName(200); 
     sw.Stop(); 
     Console.WriteLine("Elapsed in check: {0}", sw.Elapsed); 
    } 

    private void Loop(int n) 
    { 
     for (int i = 0; i < n; i++) 
     { 
      int number = i; 
     } 
    } 

Как я смог бы пройти Loop в качестве аргумента динамически положить функции в CheckPerformance() как этот секундомером профайлер? Даже если вы дадите мне имя для этого типа вещей, я смогу его найти.

Спасибо!

+1

Ну, это просто неправда ... – Charleh

+0

@wazaaaap Нет, совершенно неправильно! – DavidG

+1

Этот вопрос был задан справедливо несколько раз - проверьте это на http://stackoverflow.com/questions/3622160/c-sharp-passing-function-as-argument – Charleh

ответ

2

Вы передаете функцию типа void (int), который в C# является:

Action<int>

Итак, замените ваш ***Function myFunctionName*** с Action<int> myFunctionName и вы должны быть хорошо. Тип Action принимает от 0 до нескольких общих параметров, соответствующих типам аргументов.

Если ваша функция вернула нечто, отличное от void, вы должны использовать общий тип Func<...>. Последним общим аргументом был бы тип возврата.

+0

Я сказал вам, как вы удивительны! Я смотрел на Action и func, но понятия не имел, какая разница! – i773

+0

** Я не знаю, какую функцию я собираюсь пройти! Я хочу передать один из двух. ** Как мне перейти на передачу функции как параметра, когда я не знаю, какой из них я перехожу из списка из 2. Скажем две функции newline() и sameline(). Как передать его из этой первичной функции (somevar, newline()) или thisprimaryfunction (somevar, sameline()). Как я мог легко передавать такие функции? Оба типа являются недействительными. Мне не нужны возвращаемые значения. –

+0

что касается ** int функция (void) ** ?? –