Articles of generics

¿Por qué IEnumerable se hizo covariante en C # 4?

En versiones anteriores de C # IEnumerable se definió así: public interface IEnumerable : IEnumerable Como C # 4 la definición es: public interface IEnumerable : IEnumerable ¿Es solo para hacer que los moldes molestos en expresiones LINQ desaparezcan? ¿No introducirá esto los mismos problemas que con la string[] <: object[] (varianza de matriz rota) […]

¿Lanzar al tipo genérico en Java no aumenta ClassCastException?

Me encontré con un comportamiento extraño de Java que parece un error. ¿Lo es? Lanzar un Objeto a un tipo genérico (por ejemplo, K ) no arroja una ClassCastException incluso si el objeto no es una instancia de K Aquí hay un ejemplo: import java.util.*; public final class Test { private static void addToMap(Map map, […]

Error genérico: parámetro de tipo esperado, estructura encontrada

Comencé un nuevo proyecto, donde quiero ser lo más modular posible, con eso quiero decir que me gustaría poder reemplazar algunas partes con otras en el futuro. Esto parece ser un uso perfecto para los traits , en este momento tengo este código: mod parser; mod renderer; mod renderers; use parser::MarkParser; use renderer::MarkRenderer; struct Rustmark […]

¿Por qué no puedo pasar un Protocol.Type a un parámetro genérico T.Type?

Estaba trabajando con Swinject y un problema me está molestando. Me he quedado atrapado con esto por casi un día entero. Sospecho que esto se debe a que Swift es un lenguaje tipificado, pero no estoy del todo seguro. Resumí mi problema en este patio de recreo protocol Protocol {} class Class: Protocol {} let […]

La función genérica especializada incorrecta se llama en Swift 3 desde una llamada indirecta

Tengo un código que sigue el diseño general de: protocol DispatchType {} class DispatchType1: DispatchType {} class DispatchType2: DispatchType {} func doBar(value:D) { print(“general function called”) } func doBar(value:DispatchType1) { print(“DispatchType1 called”) } func doBar(value:DispatchType2) { print(“DispatchType2 called”) } donde en realidad, DispatchType es en realidad un almacenamiento de back-end. Las funciones doBar son métodos […]

¿Puedes usar “dónde” para requerir un atributo en c #?

Quiero hacer una clase genérica que acepte solo clases serializables, ¿se puede hacer con la restricción where? El concepto que estoy buscando es este: public class MyClass where T : //[is serializable/has the serializable attribute]

Función genérica tomando un nombre de tipo en Swift

En C #, es posible llamar a un método genérico especificando el tipo: public T f() { return something as T } var x = f() Swift no le permite especializar un método genérico al llamarlo. El comstackdor quiere confiar en la inferencia de tipo, por lo que esto no es posible: func f() -> […]

¿Cómo agrego diferentes tipos conforme a un protocolo con un tipo asociado a una colección?

Como un ejercicio de aprendizaje, estoy reescribiendo mi biblioteca de validación en Swift. Tengo un protocolo ValidationRule que define cómo deberían ser las reglas individuales: protocol ValidationRule { typealias InputType func validateInput(input: InputType) -> Bool //… } El tipo asociado InputType define el tipo de entrada a validar (por ejemplo, String). Puede ser explícito o […]

Colección de tipos generics

Si tengo una clase genérica: public class MyClass { public T Value; } Quiero crear instancias de varios elementos como … new MyClass new MyClass … y agrégalos a una colección. ¿Cómo defino la colección para que pueda contener una lista de tipos generics? Luego quiero iterar a través de la colección en algún punto […]

Llamando al método genérico con Tipo variable

Tengo un método genérico Foo Tengo una bar tipo variable ¿Es posible lograr algo como Foo Visual Studio espera un tipo o espacio de nombres en la barra. Amabilidad, Dan