Хорошо, на основании комментария, я подозреваю , ответ отрицательный, вам нужны более общие типы более высокого порядка. Вам нужно что-то вроде:
// Not real syntax!
interface IFunctor, TValue>
where TFunctor : IFunctor, TValue>
{
TFunctor Project(Func func);
}
. Проблема заключается в том, чтобы выразить мысль о том, что реализация интерфейса должна также быть родовым определенным образом и разрешить общее отношение, которое будет использоваться в остальной части интерфейса. Боюсь, это не часть дженериков .NET.
До сих пор Джо Даффи писал о , желая высших порядков - к сожалению, я не могу сказать, актуальна ли эта статья, поскольку я не могу до нее добраться в данный момент. (Его блог-сервер несколько временно, но контент велик:)
Это не совсем понятно, но, возможно, вы просто говорите о LINQ to Objects , в основном. Например:
var kids = people.Where(x => x.Age < 18) // Filtering
.Select(x => x.Name) // Projection
.ToList();
Вы могли бы написать интерфейс более общего назначения, например
public interface IFunctor
{
IFunctor Foo(Func selector);
}
... но нет такого интерфейса, фактически реализованного с помощью List
и т. Д. LINQ для объектов работает через методы расширения.
Правило eslint prefer-template
предполагает, что вы не будете объединять строки, а будете использовать только строки шаблона.
В вашем случае вам нужно заменить
' ' + classes[color]
на
` ${classes[color]}`
IIRC, eslint имеет флаг «auto-fix» для исправления ошибок такого рода. ]
Кроме того, плагин eslint для кода Visual Studio имеет встроенную функцию автоматического исправления.