Можно ли задавать "условные (выборочные) ограничения" для обобщенных типов?
Мне необходимо узнать, можно ли в С# реализовать ограничения для обобщенных типов по выбору. То есть, чтобы применялось либо первое ограничение, либо второе и тд.
Например, дан класс, реализующий работу с матрицами:
public class Matrix<T> {...}
И необходимо навесить на тип T два (а может и более) возможных ограничения.
Первое:
public class Matrix<T> where T: float {...}
Второе:
public class Matrix<T> where T: double {...}
И превратить это в что-то наподобие:
public class Matrix<T> where T: float or double {...}
Насколько я понимаю, вариант, приведенный ниже не даст нужного результата, так как в таком случае тип должен будет реализовывать компоненты обоих родителей сразу.
public class Matrix<T> where T: float, double {...}
Да, я знаю, что нельзя наследовать от структур. Однако возникла такая необходимость. Вследствие этого два подвопроса:
- Можно ли реализовать условное ограничение для обобщенного класса?
- Можно ли заменить наследуемые
floatиdoubleкакой-нибудь совокупностью родителя, типа данных или набора интерфейсов, чтобы типуTможно было придавать только значенияfloatиdouble?