2010-05-26 11 views
11

Al tratar de compilar el código siguiente en LINQPad:¿Por qué la inferencia de tipo genérico no funciona en ese caso?

void Main() 
{ 
    DriveInfo.GetDrives().Select(GetProviderName).Dump(); 
} 

static string GetProviderName(DriveInfo drive) 
{ 
    // some irrelevant WMI code... 
} 

me sale el siguiente error:

Los argumentos de tipo de método 'System.Linq.Enumerable.Select (System.Collections.Generic .IEnumerable, System.Func) 'no se puede deducir del uso. Intente especificar los argumentos de tipo explícitamente.

Si uso un lambda como d => GetProviderName(d) en lugar de un grupo método, que funciona bien ... Estoy muy sorprendido, porque estaba seguro de que el compilador sería capaz de inferir el tipo del grupo método. No hay otro método GetProviderName en alcance, y los tipos de entrada y salida están claramente definidos, por lo que debe ser implícitamente convertible a Func<DriveInfo, string> ... ¿no es así?

Respuesta

8

Ésta es una limitación en el compilador que se fijó en C# 4.0

+0

Ah, ya sabía * * lo había visto trabajar antes ... la prueba anterior se hizo en C# 3.0. ¿Tienes algún enlace de referencia sobre eso? –

+0

http://togaroga.com/2009/11/smarter-type-inference-with-c-4/ – SLaks

+0

justo lo que estaba buscando ... ¡gracias! –

Cuestiones relacionadas