Можно ли перегрузить лямбда-выражения?

1

У меня есть следующее выражение, которое делает некоторую сущность (entityframework) для сопоставления бизнес-объектов

internal static Expression<Func<CardholderEntity, Cardholder>> ExpressionMap = entity => new Cardholder
{
    Id = entity.Id,
    CardholderNo = entity.CardholderNo,
};

Однако, когда я создаю другое лямбда-выражение, подобное этому, с различными параметрами:

internal static Expression<Func<AnotherCardholderEntity, Cardholder>> ExpressionMap = entity => new Cardholder
{
    Id = entity.AnotherId,
    CardholderNo = entity.AnotherCardholderNo,
};

Я получаю красное подчеркивание под ExpressionMap, говорящим, что member with same name already declared

Возможно ли это, или есть какие-то проблемы с этим?

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

  • 1
    Нет это не так. Это потому, что лямбда-вызовы не отправляются как методы; лямбда (или выражение) является одним значением.
  • 0
    Ах, понятно, спасибо за это.
Теги:
lambda
mapping
overloading

1 ответ

3
Лучший ответ

Я не думаю, что это имеет какое-либо отношение к лямбда. То, что вы делаете, по существу эквивалентно:

internal static int x = 5;
internal static string x = "five";

Который, очевидно, не сработает.

Вы даже можете избавиться от лямбда, и это все равно не сработает:

internal static Expression<Func<CardholderEntity, Cardholder>> ExpressionMap = null;
internal static Expression<Func<AnotherCardholderEntity, Cardholder>> ExpressionMap = null;

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

  • 0
    Хорошо, не удивительно, спасибо за объяснение

Ещё вопросы

Сообщество Overcoder
Наверх
Меню