Решение, которое сработало для меня: перейдите на *.classpath
и удалите строку: <classpathentry kind="lib" path="the_problematic_class.java"/>
Нет никакой разницы. Причина их существования историческая. Converter
уже был доступен в .NET 2.0, но позже был добавлен целый ряд типов делегатов Func <>
. Для согласованности был добавлен Func
, но он делал то же самое, что и Converter
.
Converter <,>
был добавлен в .NET 2.0. Различные Func
были добавлены в 3.5 (я думаю). Конечно, разработчики фреймворка могли сказать: «Эй, у нас уже есть общий делегат для этого», но было бы очень странно иметь все остальные Func
s, а не этот. И чтобы избежать поломки, замену преобразователь
необходимо оставить на месте.
Существует множество типов делегатов, которые эффективно одинаковы - например:
ThreadStart
MethodInvoker
Action
все имеют одинаковые недействительная подпись Foo ()
. Исторически сложилось так, что имена выбирались в зависимости от конкретного использования; но с LINQ и в будущем кажется более ясным сосредоточиться на подписи - следовательно, в .NET 3.5 они представили такие вещи, как Func <...>
и Action <...>
( семейств делегатов)
К сожалению, они не совсем совместимы на уровне дисперсии, поэтому, если вы используете оба, вам часто придется использовать прокладку между ними. Какая боль ...