2016-03-15 27 views
12

Sto cercando di scrivere un metodo generico che fornisce i parametri e chiama una funzione, come questo:C# tipo metodo di gruppo inferenza

class MyClass { 
    public int Method(float arg) => 0; 
} 

TResult Call<T1, TResult>(Func<T1, TResult> func) => 
    func(default(T1)); 

void Main() 
{ 
    var m = new MyClass(); 
    var r1 = Call<float, int>(m.Method); 
    var r2 = Call(m.Method); // CS0411 
} 

L'ultima linea non riesce a compilare con CS0411. C'è qualche soluzione per ottenere l'inferenza di tipo per lavorare qui?

Caso di utilizzo: utilizzo di AutoFixture per generare parametri di chiamata di funzione.

+0

Non credo sia possibile. – mrahhal

+0

Correlati (?): Http://stackoverflow.com/a/9331879/3225495 –

+0

Non è correlato, nel suo caso i due tipi sono indipendenti e entrambi dati dal metodo handle. C# potrebbe teoricamente inferire completamente gli argomenti generici corretti. Lo standard non lo richiede per motivi di complessità. – Blindy

risposta

6

Sfortunatamente no, questa è una limitazione dell'inferenza di tipo in C#. Non funziona molto con i tipi restituiti, che è ciò che è necessario nel tuo caso per dedurre completamente gli argomenti generici su Call<>.