Есть ли способ применить несколько различных общих ограничений csharp к одному и тому же типу, где тестом является ИЛИ, а не И?
У меня есть метод расширения, который я хочу применить к подмножеству интерфейса, но нет общего интерфейса или базового класса, который бы захватывал только те классы, на которые я хочу ориентироваться.
В приведенном ниже примере я мог бы написать несколько методов, каждый из которых имел бы одно ограничение, и все они вызывали бы один и тот же метод Swim, но мне интересно, есть ли способ написать один метод с несколькими непересекающимися ограничениями.
Например
interface IAnimal
{
bool IsWet { get; set; }
bool IsDrowned { get; set; }
}
public static class SwimmingHelpers
{
/*this is the psuedo effect of what I would like to achieve*/
public static void Swim<T>(this T animalThatCanSwim)
where T: IAnimal, Human |
where T: IAnimal, Fish |
where T: IAnimal, Whale ....
}
FYI Фактический сценарий, с которым я играю, - это элементы HTML, все из которых реализуют интерфейс IElement, но я хочу ориентироваться только на элементы, для которых определенное поведение допустимо в спецификации HTML, и для них не реализован более конкретный общий интерфейс, например: может иметь атрибут только для чтения.