Функ на 5 аргументов - PullRequest
       31

Функ на 5 аргументов

1 голос
/ 27 августа 2010

Я работаю с System.Func, но наткнулся на него.

System.Func<TReturn> // (no arg, with return value)
System.Func<T, TReturn> // (1 arg, with return value)
System.Func<T1, T2, TReturn> // (2 arg, with return value)
System.Func<T1, T2, T3, TReturn> // (3 arg, with return value)
System.Func<T1, T2, T3, T4, TReturn> // (4 arg, with return value)

Максимальное допустимое значение - 4 аргумента.

Есть ли способ расширить это до 5 аргументов?

Ответы [ 3 ]

9 голосов
/ 27 августа 2010

Перейти к более высокой версии .NET Framework. Например. .NET 4.0 имеет до 16

http://msdn.microsoft.com/en-us/library/yxcx7skw.aspx

, тогда как 3,5 имеет только 4

http://msdn.microsoft.com/en-us/library/yxcx7skw(v=VS.90).aspx

Или, если вы застряли в более низкой версии, просто определите делегата самостоятельно.

5 голосов
/ 27 августа 2010

У вас есть несколько вариантов, один из которых - определить делегата, который будет выглядеть так:

public delegate TResult Func<T1,T2,...,TN,TResult>(T1 arg1, T2 arg2,...,TN argN); 

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

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

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

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

1 голос
/ 27 августа 2010

Полагаю, что можно увидеть Action и Func по крайней мере с 25 параметрами в framework 5.0 :)

Нет никаких причин переходить на более высокую версию framework, потому что я не могу изменить свой код на valid, ремонтопригодный вид.На самом деле это не очень хорошая практика - использовать так много параметров в методе сигнатуры функции.Используйте сущность, которая имеет 5 полей или свойств.Вы можете использовать эту сущность без изменения метода или сигнатуры функции.

...