2016-03-15 9 views
12

Próbuję napisać ogólny sposób, który dostarcza parametry i wywołuje funkcję, na przykład:C# typ grupy metoda wnioskowania

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 
} 

Ostatnia linia nie skompilować z CS0411. Czy istnieje jakiś sposób obejścia tego procesu?

Przykład użycia: użycie AutoFixture do wygenerowania parametrów wywołania funkcji.

+0

Nie sądzę, że to możliwe. – mrahhal

+0

Powiązane (?): Http://stackoverflow.com/a/9331879/3225495 –

+0

Nie jest powiązane, w jego przypadku dwa typy są niezależne i oba są podawane przez uchwyt metody. C# może teoretycznie w pełni wywnioskować poprawne ogólne argumenty. Standard nie wymaga tego ze względu na złożoność. – Blindy

Odpowiedz

6

Niestety nie, to ograniczenie typu wnioskowania w języku C#. Tak naprawdę nie robi zbyt wiele z typami zwracanymi, co jest potrzebne w twoim przypadku, aby w pełni wywnioskować ogólne argumenty do Call<>.