Есть ли способ применить несколько разных общих ограничений csharp к тому же типу, где тест OR, а не AND?Есть ли способ применить общие ограничения C#, а не совместно?
У меня есть метод расширения, который я хочу применить к подмножеству интерфейса, но нет общего интерфейса или базового класса, который отображает только те классы, которые я хочу настроить.
В приведенном ниже примере я мог бы написать несколько методов с одним ограничением, которые все вызовут один и тот же метод 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 спецификации и не более конкретных общих интерфейс реализуется ими, например: элементами, которые могут иметь атрибут readonly.
Почему бы не создать общий интерфейс? – PostMan
Потому что это сторонняя библиотека. Я просто изучаю, как использовать дженерики, а также методы расширения, избегая при этом повторения :-) –
Достаточно справедливо, я просто принимаю IAnimal, а затем бросаю ArgumentException из не требуемого типа – PostMan