Каково различие между Func <T, TResult> и Преобразователем <TInput, TOutput>?

Решение, которое сработало для меня: перейдите на *.classpath и удалите строку: <classpathentry kind="lib" path="the_problematic_class.java"/>

10
задан Paul Suart 3 June 2009 в 10:03
поделиться

3 ответа

Нет никакой разницы. Причина их существования историческая. Converter уже был доступен в .NET 2.0, но позже был добавлен целый ряд типов делегатов Func <> . Для согласованности был добавлен Func , но он делал то же самое, что и Converter .

17
ответ дан 3 December 2019 в 14:53
поделиться

Converter <,> был добавлен в .NET 2.0. Различные Func были добавлены в 3.5 (я думаю). Конечно, разработчики фреймворка могли сказать: «Эй, у нас уже есть общий делегат для этого», но было бы очень странно иметь все остальные Func s, а не этот. И чтобы избежать поломки, замену преобразователь необходимо оставить на месте.

6
ответ дан 3 December 2019 в 14:53
поделиться

Существует множество типов делегатов, которые эффективно одинаковы - например:

  • ThreadStart
  • MethodInvoker
  • Action

все имеют одинаковые недействительная подпись Foo () . Исторически сложилось так, что имена выбирались в зависимости от конкретного использования; но с LINQ и в будущем кажется более ясным сосредоточиться на подписи - следовательно, в .NET 3.5 они представили такие вещи, как Func <...> и Action <...> ( семейств делегатов)

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

8
ответ дан 3 December 2019 в 14:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: