2012-08-01 16 views
5

¿Es posible tener una restricción genérica que sea un tipo genérico ilimitado?C# tipo genérico no delimitado como restricción

Por ejemplo:

public T DoSomething<T>(T dictionary) where T : IDictionary<,> 
{ 
    ... 
} 

Editar: Sólo para explicar el contexto, quiero restringir el uso del método a un IDictionary, pero para el método en sí no importa exactamente qué son TKey y TValue

+4

'public V DoSomething (IDictionary dictionary)' ¿Esto es lo que quieres decir? – oleksii

+1

Amir Abiri, ¿por qué quieres que el tipo de devolución sea el mismo que el tipo de parámetro 'T'? ¿Vas a devolver el parámetro? Probablemente no hay necesidad de eso. Y no puedes construir fácilmente otra 'T'. A menos que quiera restringir 'T: new()' también. –

Respuesta

6

Esto no es posible, es necesario que especifique los parámetros de tipo:

public T DoSomething<T, TKey, TValue>(T dictionary) where T : IDictionary<TKey, TValue> { ... } 
+1

Ves lo divertido es que TKey y TValue se pueden deducir de T y no los necesito en ningún lugar del cuerpo del método. Así que esperaba hacer la firma genérica más limpia. –

+0

@AmirAbiri - ¿Podrías restringir 'T' al' IDictionary' no genérico en su lugar? – Lee

+0

Bueno, en realidad usé IDictionary solo para simplificar el ejemplo. Mi tipo real es "cualquier subclase de BaseGameState " (es decir, T no es una interfaz, es mi propia clase base). –

0

No, usted no puede hacer eso. Tal vez se puede utilizar

public IDictionary<TKey, TValue> DoSomething<TKey, TValue>(IDictionary<TKey, TValue> dictionary) 
{ 
... 
} 
1

Hay un problema en rosylin github, sin embargo, no ha hecho todavía. Entonces no es posible en este momento, pero espero que sea relativamente pronto.

Cuestiones relacionadas