2012-01-17 10 views
8

Ho urlato per aver tentato di utilizzare la parola domanda nel titolo, quindi questo è ciò che mi è venuto in mente. Ad ogni modo, questa è una domanda puramente accademica sui tipi di parametri.Un tipo di parametro rovinato my Func <shui>

OK, ecco quello che ottengo.

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)); 
     } 
    } 
} 

Questo è chiaro e inequivocabile a me (i lettori più attenti riconosceranno questo come una semplice estensione di un esempio si trova a pagina 249 del C# in Depth). Ricevo totalmente ciò che sta accadendo, il compilatore dice che c'è un tipo (da definire per T e poi per Ttwo). Quello che non capisco è perché a pagina 65 l'esempio ha solo un parametro di tipo.

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

Come fa il compilatore conosce T in questo caso?

+2

Sto pensando che il metodo sia contenuto all'interno di una classe generica che definisce T. – ChaosPandion

+2

+1 Buona domanda, titolo solido. – MPelletier

risposta

9

Non abbiamo abbastanza informazioni per rispondere con certezza. Forse T è definito nella classe circostante?

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

Se questo è un esempio del metodo di List<T> s' ConvertAll, quindi il mio suggerimento sopra è il caso.

+0

Ah, mi hai battuto anche tu! Quella scintilla è appena esplosa nel mio cervello. – Kenn

Problemi correlati