2014-10-04 10 views
7

volevo sapere se questo è possibile:Fare un tipo di vincolo generico Funz <T>

public class Foo<T> where T : Func<T> 

o

public class Foo<T> where T : Func<> 

Sembra che il compilatore mi sta dicendo che non è possibile. Suppongo di poter lanciare un'eccezione di runtime nel costruttore, ma speravo di ottenere un errore del compilatore.

Qualsiasi modo per farlo?

+0

Probabilmente la soluzione corretta qui è quella di accettare solo 'T', quindi utilizzare' Func 'nella classe. –

+0

Ci ho pensato, ma poi dovrei andare come i .NET. Creano 17 overload per supportare la base Func . :) So che è sciocco, voglio solo sapere. – halivingston

+1

Non dire questa è una buona idea, ma è possibile seguire questo thread https://roslyn.codeplex.com/discussions/543871 e apportare una modifica in Roslyn e compilare il codice utilizzando tale compilatore. – mjsabby

risposta

6

Purtroppo, sembra che tu non abbia fortuna. Func<> e Action<> sono entrambi tipi delegati, che non possono essere utilizzati come un vincolo di tipo generico.

Questa risposta riassume abbastanza bene C# Generics won't allow Delegate Type Constraints

Problemi correlati