2013-03-07 2 views
0

У меня есть универсальный метод, который имеет несколько параметров, плюс тип возвращаемого значения:C# Generic Несколько параметров

public static class Support 
{ 
    public static TR JSONKeyName<TR, T1, T2, T3>(this IEnumerable<Tuple<T1, T2>> a, Action<T3> b) 
    { 
     TR result = default(TR); 

     try 
     { 
      foreach (var entry in a) 
      { 
       b((T3)TypeDescriptor.GetConverter(typeof(T3)).ConvertFromInvariantString("[ \"" + entry.Item1 + "\", " + entry.Item2 + "\" ]")); 
      } 

      result = (TR)Convert.ChangeType(true, typeof(TR)); 
     } 
     catch 
     { 
      result = (TR)Convert.ChangeType(false, typeof(TR)); 
     } 

     return result; 
    } 
}  


List<Tuple<int, string>> list = new List<Tuple<int, string>>(); 
list.Add(new Tuple<int, string>(1, "Test 1")); 
list.Add(new Tuple<int, string>(2, "Test 2")); 
list.Add(new Tuple<int, string>(3, "Test 3")); 

var res = list.JSONKeyName<bool>((string entry) => 
    { 


    }); 

При вызове JSONKeyName из приведенного выше примера, я получаю следующее сообщение об ошибке:

Ошибка компилятора:

*Using the generic method requires 4 type arguments

+2

Метод имеет 4 типа параметров, поэтому он требует 4 аргументов типа ... где путаница? –

+0

Я понимаю, что говорит об ошибке. Но один из параметров - для типа возврата, который является TR. Поэтому я могу ошибаться. Я немного новичок в использовании дженериков, поэтому у меня может быть неправильный код – adviner

+0

Да, но вам также нужно указать T1, T2 и T3. –

ответ

2

Er, вы заметили, что он принимает несколько аргументов, и вы, очевидно, передавая ей только один - bool. Измените его на list.JSONKeyName<bool, int, string, string>, согласно контексту.

+0

ОК, я понял. Спасибо всем за помощь – adviner

Смежные вопросы