Статический метод Список <T>свойства не найдены - PullRequest
0 голосов
/ 20 мая 2019

Я убираю такую ​​грязную генерацию кода у них есть классы в пользовательском интерфейсе (ASPX) для всех выпадающих, Сначала я смог изменить на linq не хочу, чтобы статический метод передавал список

, поэтому логика выгружена из интерфейса вот что у меня есть

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

public static string Get_GenericDisplayData_Data(IList<T> ilist)
        {
            var list = (from prop in ilist
                select new

                    Display = prop.Display ?? "",
                    Description = prop.Description ?? "",
                    Id = prop.Id
                }).ToList();

            string json = new JavaScriptSerializer().Serialize(list);
            return json;
        }

Компилятор выдает ошибки о том, что Display, ID и Description не существуют или не могут быть найдены, как это исправить?

1 Ответ

1 голос
/ 20 мая 2019

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

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

where T : TheBaseClass

Альтернативой, которая не так рекомендуется, является использование динамического.

from dynamic item in items
select new
{
    Display = item.Display ?? "",
    Description = item.Description ?? "",
    Id = item.Id
}

Будет выдано исключение времени выполнения, если у типа элемента коллекции нет этих членов.

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

Кстати, имя вашего идентификатора - antipattern, и имя не представляет логического значения переменных. Используйте предметы и предмет соответственно для коллекции и ее элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...