Если, как вы говорите, вы хотите, чтобы иметь возможность передавать полностью несвязанные списки, может быть, вы должны принять интерфейс базы IList:
public void Export(string FileName, params IList[] Data)
Все List<T>
объекты реализации IList
, а также как общий IList<T>
, чтобы вы могли обеспечить это.
На самом деле, в зависимости от того, что вам нужно делать с этими списками в Экспортере, возможно, для вас требуется IEnumerable
, если вам нужно только однократная функция только для чтения.
Лучший способ принять решение - определить, какая общая функциональность вам нужна для всех параметров, и определить свою подпись метода для обеспечения этой функциональности.
UPDATE
Основываясь на ваш комментарий, кажется, что вы хотите, это возможно в C# 4.0 с помощью общековариантные/контравариантными дженерики, а это означает, что общий ISomething<out object>
может получить ISomething<string>
. Проблема заключается в том, что IList<T>
не определяет ковариантный общий параметр, поэтому передача IList<string>
для IList<object>
не работает.
Однако IList<T>
наследует IEnumerable<out T>
, который определяет ковариантный параметр. Поэтому, если ваш метод Export
получает параметр params IEnumerable<object>[] data
, вам ДОЛЖЕН быть в состоянии передать ему любой IList<T>
, который вы хотите.
Действительно ли 'HistoryBook'' MathBook' и 'ScienceBook' наследуются от того же класса, например' Book'? – Candide
Возможно, вы хотите, чтобы книги наследовались от класса «Книга»? – Gene
Да, сделайте классы наследуемыми от книги BaseClass или реализуйте интерфейс под названием Book, а затем параметром метода будет тип BaseClass или тип интерфейса – Marshal