2008-12-30 29 views
19

Aquí hay una pregunta de sintaxis simple (espero), sé cómo restringir un tipo genérico utilizando la cláusula where, pero ¿cómo restringir dos tipos genéricos?¿Cómo restringir varios tipos genéricos?

Tal vez la forma más fácil es escribir lo que mi mejor conjetura fue sobre la sintaxis.

public class GenericDaoGetByIdTests<TDao, TComponent> : BaseDaoTests 
    where TDao : IDao<TComponent>, TComponent : EDC2ORMComponent { 
    public void GetByIdTest(int id) { } 
} 

Esto me da un error. ¿Alguien sabe cuál es la sintaxis correcta?

Respuesta

41

uso de dos 'dónde' palabras clave, por ejemplo, tengo una declaración como esta:

public interface IParentNodeT<TChild, TSelf> 
    where TChild : IChildNodeT<TSelf, TChild>, INodeT<TChild> 
    where TSelf : IParentNodeT<TChild, TSelf> 
{ 
    TChild childRoot { get; set; } 
} 
5

Esto debería funcionar:

public class GenericDaoGetByIdTests<TDao, TComponent> : BaseDaoTests 
    where TDao : IDao<TComponent> where TComponent : EDC2ORMComponent { 
    public void GetByIdTest(int id) { } 
} 

que acaba de repetir el dónde.