Articles of genéricos

Digite inferência com interfaces e restrições genéricas

Eu estou construindo um despachante de consulta genérico. A ideia é a seguinte: Uma interface genérica IQuery que representa um object de consulta Uma class de consulta concreta tem alguns getters e setters (implementando IQuery ) Uma interface genérica IQueryHandler com um único método que recebe um TQuery (com uma restrição em TQuery: IQuery ) […]

Genéricos Dolorosos, Operador ‘> =’ não podem ser aplicados a operandos do tipo ‘T’ e ‘T’

Aqui está o meu código: class BinaryTree { private node Head; public class node { public T Data; public node right; public node left; public node parent; … } … private void insert(ref T data, node parent, ref node currentChild) { … { if (currentChild.Data >= data) insert(ref data, currentChild, ref currentChild.right); else insert(ref data, […]

Fundição de genéricos e o tipo genérico

Considere, eu tenho as seguintes 3 classs / interfaces: class MyClass { } interface IMyInterface { } class Derived : IMyInterface { } E eu quero ser capaz de lançar um MyClass em um MyClass ou vice-versa: MyClass a = new MyClass(); MyClass b = (MyClass)a; Mas eu recebo erros de compilador se eu tentar: […]

Fazendo genéricos com muitos tipos

Eu tenho um pedaço de código onde às vezes eu preciso criar um novo tipo genérico, mas com um número desconhecido de parâmetros genéricos. Por exemplo: public object MakeGenericAction(Type[] types) { return typeof(Action).MakeGenericType(paramTypes); } O problema é que, se eu tiver mais de um Type na minha matriz, o programa irá falhar. No curto prazo, […]

Como recuperar o nome de um método genérico, incluindo nomes de tipos genéricos

Em C# , eu tenho um método com a seguinte assinatura: List Load(Repository repository) Dentro do método Load() , eu gostaria de despejar o nome completo do método (para fins de debugging), incluindo o tipo genérico. por exemplo: chamando Load(); escreveria “Load” O que eu tenho tentado até agora: usando MethodBase.GetCurrentMethod() e GetGenericArguments() para recuperar […]

IList usando covariância e contravariância em c #, isso é possível?

Isso seria possível? (Eu não tenho contra 2010, então eu não posso experimentar, desculpe) public interface IComplexList where TOutput : TInput { public IEnumerator GetEnumerator(); public void Add(TInput item); } public interface IList : IComplexList { } Se eu acertar, você poderia usar isso para realmente implementar covariância e contravariância na mesma interface.

Dicionário de tipos de classs

Eu tenho um conjunto de classs, cada uma das quais pode abrir diferentes tipos de arquivos usando um aplicativo externo e dizer a esse aplicativo para imprimir o arquivo em uma determinada impressora. Todas as classs herdam uma class abstrata comum e uma interface. internal interface IApplicationPrinter : IDisposable { string ApplicationExe { get; } […]

Vinculando uma lista genérica do tipo struct a um repetidor

Eu tive um pequeno problema ao tentar ligar uma lista genérica a um repetidor. O tipo usado na lista genérica é, na verdade, uma estrutura. Eu construí um exemplo básico abaixo: struct Fruit { public string FruitName; public string Price; // string for simplicity. } protected void Page_Load(object sender, EventArgs e) { List FruitList = […]

Como restringir um genérico para ser do tipo enum?

Considere o seguinte código: class Base { //Base members } Eu quero que o genérico T seja um enum (usando restrições, se possível). Como posso fazer isso em c #? EDITAR: Usar contratos de código – introduzidos pelo Akash Kava – também parece ser um bom caminho. Consegui fazê-lo para produzir um erro de tempo […]

XmlSerializer está lançando InvalidOperationException ao usar a restrição de tipo genérico onde

Quando tento executar o seguinte código (dois conjuntos separados) ClassLibrary.cs public interface ITest { } Program.cs using System; public class TestClass { public void Test(T x) where T : ITest { } } static class Program { static void Main(string[] args) { new System.Xml.Serialization.XmlSerializer(typeof(TestClass)); } } Compilado no Windows 7 de 64 bits usando os […]