2012-01-17 17 views
8

Me gritaron por tratar de usar la palabra pregunta en el título, así que esto es lo que se me ocurrió. En cualquier caso, esta es una pregunta puramente académica sobre los tipos de parámetros.Un tipo de parámetro arruinó mi Func <shui>

OK, entonces esto es lo que obtengo.

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

Eso es clara e inequívoca a mí (Los lectores astutos reconocerán esto como una simple extensión de un ejemplo encontrado en la página 249 de C# in Depth). Entiendo totalmente lo que está sucediendo, el compilador dice que hay algún tipo (que se definirá para T y luego para Ttwo). Lo que no entiendo es por qué en la página 65 el ejemplo solo tiene un parámetro de tipo.

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

¿Cómo sabe el compilador sobre T en este caso?

+2

Estoy pensando que el método está dentro de una clase genérica que define T. – ChaosPandion

+2

+1 Buena pregunta, título sólido. – MPelletier

Respuesta

9

No tenemos suficiente información para responder con seguridad. Tal vez T se define en la clase de los alrededores?

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

Si esto es un ejemplo de método ConvertAllList<T> 's, entonces mi sugerencia anterior es el caso.

+0

¡Ah, todos ustedes también me ganaron! Esa chispa simplemente estalló en mi cerebro. – Kenn

Cuestiones relacionadas