Вопрос

Я работаю с 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 аргументов?

Это было полезно?

Решение

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

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

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

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

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

Таким образом, мой личный подход будет выяснить, где дизайн не удался и исправить то, что, а не правильно, что чаще всего является симптомом (в этом случае определяет ФУНК с достаточными соглашениями мог исправить симптому, не говоря, что это так, как я не знаю свой код)

Другие советы

Перейти к более высокой версии .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.

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

Я думаю, можно увидеть действие и функцию функции, по крайней мере, с 25 параметрами в рамках 5.0 :)

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top