Универсальный метод со многими типами - PullRequest
0 голосов
/ 28 августа 2018

Если я хочу, чтобы универсальный метод имел много универсальных типов, например, до 16.

Нужно ли перегрузить метод 16 раз или есть какой-нибудь более разумный способ сделать это?

public interface IMyInterface { }

public class MyClass {
    public void MyMethod<T1>() where T1 : IMyInterface { }
    public void MyMethod<T1, T2>() where T1 : IMyInterface where T2 : IMyInterface { }
    public void MyMethod<T1, T2, T3>() where T1 : IMyInterface where T2 : IMyInterface 
                                       where T3 : IMyInterface { }
    public void MyMethod<T1, T2, T3, T4>() where T1 : IMyInterface where T2 : IMyInterface 
                                           where T3 : IMyInterface where T4 : IMyInterface { }
    // All the way to T16...
    // Is there any smarter way of doing this
    // instead of having to write it 16 times?
}

1 Ответ

0 голосов
/ 28 августа 2018

Если вы посмотрите на документацию Action<T1, T2, ....>, кажется, что вам нужно реализовать все перегрузки в одиночку.

Вот справочный источник . Как видите, все сделано как в вашем примере.

Более подробный ответ о том, почему params эквивалент не существует, может быть найден Джоном Скитом здесь . В нем говорится:

"По сути, Func<T> и Func<T1, T2> являются полностью несвязанными типами в отношении CLR, и нет ничего подобного params для указания аргументов нескольких типов."

...