Обычно вам не нужно явно определять аргументы универсального типа, используемые при вызове универсального метода. Типы будут подразумеваться типами аргументов, которые вы вызываете. Если есть двусмысленность, компилятор сообщит вам.
например.,
IDictionary<string, string> myExampleDictionary = ...;
DataSet myExampleDataSet = myExampleDictionary.ToDataSet();
// equivalent to: myExampleDictionary.ToDataSet<string, string>();
IDictionary<string, int> anotherDictionary = ...;
DataSet anotherDataSet = anotherDictionary.ToDataSet();
// equivalent to: anotherDictionary.ToDataSet<string, int>();
Упс, я не понял, что вы перегружены ToDataSet()
. Я видел только первый, который занял сингл IDictionary<TKey, TValue>
.
Но в любом случае вторая перегрузка должна иметь общие параметры такие же, как и первая. Это будет IList
из IDictionary
с, поэтому оно должно быть в такой форме:
public static DataSet ToDataSet<TKey, TValue>(this IList<IDictionary<TKey, TValue>> currentList)
{
// ...
}
Здесь есть только 2 неизвестных типа, TKey
и TValue
, и это будет подразумеваться как обычно.
IList<IDictionary<string, string>> myList = ...;
DataSet myDataSet = myList.ToDataSet();
// equivalent to: myList.ToDataSet<string, string>();
IDictionary<string, int> anotherList = ...;
DataSet anotherDataSet = anotherList.ToDataSet();
// equivalent to: anotherList.ToDataSet<string, int>();