Я могу сделайте это, написав
Код: Выделить всё
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;
Очевидно, что он не может вывести два параметра типа из одного аргумента.
Как написать такую функцию? Неужели это просто невозможно?
Контекст — .NET Framework 4.8.1, то есть C# 7.3.
Подробнее здесь: https://stackoverflow.com/questions/791 ... e-as-its-p