2012-01-17 10 views
8

Zostałem krzyknięty za to, że próbowałem użyć słowa słowo w tytule, więc to właśnie wymyśliłem. W każdym razie jest to czysto akademickie pytanie o typy parametrów.Typ parametru zrujnował moje Func <shui>

OK, więc oto, co otrzymuję.

using System; 
namespace TypeParamTest 
{ 
    internal class Program 
    { 
     private static void Main(string[] args) 
     { 
      PrintType(1, new object()); 
      Console.ReadKey(); 
     } 
     static void PrintType<T, Ttwo>(T first, Ttwo second) 
     { 
      Console.WriteLine(typeof(T) + " : " + typeof(Ttwo)); 
     } 
    } 
} 

To jest jasne i jednoznaczne dla mnie (Uważni czytelnicy mogą uznać to za proste rozszerzenie przykład znaleźć na stronie 249 C# in Depth). Całkowicie dostaję to, co się dzieje, kompilator mówi, że istnieje jakiś typ (który zostanie zdefiniowany dla T, a następnie dla Ttwo). Czego nie rozumiem, dlaczego na stronie 65 przykład ma tylko jeden parametr typu.

List<TOutput> ConvertAll<TOutput>(Converter<T, TOutput> conv); 

W jaki sposób kompilator wie o numerze T?

+2

Myślę, że metoda jest zawarta w ogólnej klasie, która definiuje T. – ChaosPandion

+2

+1 Dobre pytanie, solidny tytuł. – MPelletier

Odpowiedz

9

Nie mamy wystarczających informacji, aby na pewno odpowiedzieć. Może T jest zdefiniowany na otaczającej klasie?

public class SomeClass<T> { 
    List<TOutput> ConvertAll<TOutput>(Converter<T, TOutput> conv); 
} 

Jeśli jest przykładem ConvertAll metody List<T> „s, następnie moja propozycja powyżej jest to przypadek.

+0

Ach, wszyscy też mnie biją! Ta iskra właśnie wybuchła w moim mózgu. – Kenn

Powiązane problemy