2010-03-08 9 views
19

Tengo un poco de lógica en un método que opera en un tipo específico y me gustaría crear un lambda genérico que encapsule la lógica. Este es el espíritu de lo que estoy tratando de hacer:¿Es posible definir una lambda genérica en C#?

public void DoSomething() 
{ 
    // ... 

    Func<T> GetTypeName =() => T.GetType().Name; 

    GetTypeName<string>(); 
    GetTypeName<DateTime>(); 
    GetTypeName<int>(); 

    // ... 
} 

Sé que puedo pasar el tipo como un parámetro o crear un método genérico. Pero me interesa saber si un lambda puede definir sus propios parámetros genéricos. (Así que no estoy buscando alternativas.) Por lo que puedo decir, C# 3.0 no es compatible con esto.

+0

¿Qué está tratando de hacer, exactamente * *? Recuerde que una expresión lambda es solo una función sin nombre, y la variable (Func o Acción) es solo un puntero (delegado) para esa función. Si es más específico sobre su problema, tal vez podamos ayudarlo mejor. – Robear

Respuesta

15

No es posible crear una expresión lambda que tenga nuevos parámetros genéricos. Puede reutilizar parámetros genéricos en los métodos o tipos que contienen pero no crear nuevos.

0

Esto solo es posible cuando el método DoSomething es genérico o su clase es genérica.

1

Si bien no se puede (todavía?) Tienen una lambda genérico (véase también this answer y uno de los comentarios a this question), se puede obtener la misma sintaxis uso. Si define:

public static class TypeNameGetter 
{ 
    public static string GetTypeName<T>() 
    { 
     return typeof(T).Name; 
    } 
} 

La Usted puede usarlo (aunque using static es C# 6) como:

using static TypeNameGetter; 
public class Test 
{ 
    public void Test1() 
    { 
     var s1 = GetTypeName<int>(); 
     var s2 = GetTypeName<string>(); 
    } 
} 
Cuestiones relacionadas