Определите универсальную функцию C#, которая возвращает тот же тип коллекции, что и ее параметр.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Определите универсальную функцию C#, которая возвращает тот же тип коллекции, что и ее параметр.

Сообщение Anonymous »

Предполагая, что я хочу написать расширение .NET .NullIfEmpty(), которое должно применяться к любому типу, реализующему IReadOnlyCollection.
Я могу сделайте это, написав

Код: Выделить всё

public static IReadOnlyCollection NullIfEmpty(this IReadOnlyCollection c)
=> c.Count == 0 ? null : c;
Но при этом отбрасывается тип коллекции, что очень контрпродуктивно.
Чтобы вернуть тип параметра, общий тип должен быть типом коллекция. Но теперь я не могу ограничить этот тип реализацией IReadOnlyCollection
(и нет необщего интерфейса, позволяющего получать только счетчик - еще одна печальная история).

Код: Выделить всё

public static C NullIfEmpty(this C c) where C : IReadOnlyCollection // error!
=> c.Count == 0 ? null : c;
Итак, мне нужен еще один общий параметр для типа элемента.
Но когда я пишу

Код: Выделить всё

public static C NullIfEmpty(this C collection) where C : IReadOnlyCollection
=> c.Count == 0 ? null : c;
вывод типа не соответствует, например. List.
Очевидно, что он не может вывести два параметра типа из одного аргумента.
Как написать такую ​​функцию? Неужели это просто невозможно?
Контекст — .NET Framework 4.8.1, то есть C# 7.3.

Подробнее здесь: https://stackoverflow.com/questions/791 ... e-as-its-p
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»