Можно ли задавать "условные (выборочные) ограничения" для обобщенных типов?

Мне необходимо узнать, можно ли в С# реализовать ограничения для обобщенных типов по выбору. То есть, чтобы применялось либо первое ограничение, либо второе и тд.

Например, дан класс, реализующий работу с матрицами:

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 {...}

Да, я знаю, что нельзя наследовать от структур. Однако возникла такая необходимость. Вследствие этого два подвопроса:

  1. Можно ли реализовать условное ограничение для обобщенного класса?
  2. Можно ли заменить наследуемые float и double какой-нибудь совокупностью родителя, типа данных или набора интерфейсов, чтобы типу T можно было придавать только значения float и double?

Ответы (0 шт):