Если, как вы говорите, вы хотите иметь возможность передавать полностью несвязанные списки, возможно, вам следует принять базовый интерфейс IList:
public void Export(string FileName, params IList[] Data)
Все List<T>
объекты также реализуют IList
как обобщенный IList<T>
, так что вы можете применять его.
На самом деле, в зависимости от того, что вам нужно делать с этими списками в Экспортере, возможно, вам достаточно применения IEnumerable
, если все, что вам нужно, этофункциональность только для чтения.
Лучший способ решить - определить, какие общие функциональные возможности вам нужны для всех параметров, и определить сигнатуру вашего метода для реализации этой функциональности.
ОБНОВЛЕНИЕ
Исходя из вашего комментария, кажется, что вы хотите, возможно в 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>
файл.