Tag: generics

不同类型的集合

给定以下界面: public interface IEventHandler where TEvent : IEvent { void Process(TEvent @event); } 我可以使用什么IEnumerable类型来存储TEvent不同的IEventHandler实现的集合? 即给出以下3个实现: public class BlahEvent1EventHandler : IEventHandler { … } public class WhateverEvent1EventHandler : IEventHandler { … } public class BlahEvent2EventHandler : IEventHandler { … } 我可以比一组物品做得更好吗? var handlers = new List { new BlahEvent1EventHandler(), new WhateverEvent1EventHandler(), new BlahEvent2EventHandler(), }; 顺便说一句,已经看到一些其他的答案主张使用基类型或inheritance的非通用接口,但看不出在这种情况下如何增加大量的价值,除非我遗漏了什么。 是的,它会让我以一种稍微更安全的方式将它们全部添加到集合中,使用对象,但不会让我迭代它们并调用强类型的Process方法而不像我需要对象那样进行转换。 […]

.NETgenerics:如何在运行时解析类型T?

让我在下面的例子中解释一下我正在解决的问题: class Animal {} class Cat: Animal {} class Dog : Animal { } interface IAnimalHandler where T: Animal { void Handle(T animal); } class AnimalHandler : IAnimalHandler, IAnimalHandler { public void Handle(Cat animal) { Console.Write(“it’s a cat !”); } public void Handle(Dog animal) { Console.Write(“it’s a dog !”); } } 所以现在我想通过所有动物并运行这样的适当处理程序: var ah = […]

WCF:通用接口的序列化是否可行?

我正在尝试实现一个服务契约,其中包含一个采用通用接口的方法,并且该generics接口本身具有一个接口参数。 我用ServiceKnownType修饰了服务接口,我用常规的KnownType修改了服务实现,并且我用常规的KnownType修饰了datacontract实现: [ServiceContract(SessionMode = SessionMode.Required, CallbackContract = typeof(ICallbacks))] [ServiceKnownType(typeof(Batch))] [ServiceKnownType(typeof(Command))] public interface IActions { [OperationContract] IResponse TakeAction(IBatch commands); } [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Reentrant)] [KnownType(typeof(Batch))] [KnownType(typeof(Command))] internal class Actions : IActions { } [DataContract] [KnownType(typeof(Command))] public class Batch : IBatch { } 为了记录,我在那里有批处理,因为看起来你只能表达一个generics类型的知识类型 – 它似乎发出BatchOfanyType,但我不知道如何处理它。 我得到的例外是“将任何静态未知的类型添加到已知类型列表中 – 例如,通过使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表中。” 有什么明显的我做错了吗? 是否不支持接口的通用接口? 为了记录我在这个项目的C#2.0和.NET 3.0上。

筛选列表对象的通用方法

我正在尝试创建一个带有三个参数的generics方法。 1)列表集合2)字符串PropertyName 3)字符串FilterString 我们的想法是传递一个对象集合,对象属性的名称和过滤条件,它返回一个对象列表,其中属性包含FilterString。 此外,PropertyName是可选的,因此如果未提供,我想在任何属性中返回包含FilterString的所有对象。 任何关于此的指针都会非常有用。 我想尝试这样的方法签名:public static List FilterList(List collection,String FilterString,String Property =“”) 这样我可以从任何地方调用此方法并将其传递给任何List,它将返回一个筛选列表。

使用在运行时确定的类型参数调用generics函数

我有一个问题涉及使用在运行时已知的类型参数调用类的generics方法。 具体来说,代码如下所示: FieldInfo[] dataFields = this.GetType().GetFields( BindingFlags.Public | BindingFlags.Instance ); // data is just a byte array used internally in DataStream DataStream ds = new DataStream( data ); foreach ( FieldInfo field in dataFields ) { Type fieldType = field.FieldType; // I want to call this method and pass in the type parameter specified by […]

C#中generics类型的命名空间范围别名

让我们举个例子: public class X { } public class Y { } public class Z { } public delegate IDictionary<Y, IList> Bar(IList x, int i); public interface IFoo { // … Bar Bar { get; } } public class Foo : IFoo { // … public Bar Bar { get { return null; //… } } […]

如何创建C#按钮数组?

如何在Winforms应用程序中构建按钮数组? 我想要做的是:我有一些日历安排的按钮,表示时间段。 IE:周一0700Button,周一0730Button,周一0800Button,依此类推30分钟。 我有一个xml数据库,其中一个约会字段是当持续时间= 0.5小时, 字段等于“07:00 am”时,为’Monday0700Button’着色。 当持续时间为1.0小时时,我希望它填充’Monday0700Button’以及’Monday0730Button’的下一个时间段按钮。 有任何想法吗? 谢谢。

generics和实现IComparable

我对generics非常新,我正在尝试编写一个简单的类,它将是通用的,但也允许对字符串成员变量进行一些描述的排序。 目前我有一个基本的类,但是当我尝试实现接口成员CompareTo()时,我在顶部收到一个错误,告诉我它没有实现。 这是什么问题? using System; namespace GenericsPracticeConsole.Types { class SortableGenericType : IComparable { private T t; private string stringName; public T name { get { return t; } set { t = value; } } public int CompareTo(SortableGenericType ourObject) { return stringName.CompareTo(ourObject.stringName); } } }

如何查看GenericTypeDefinition是否实现IEnumerable

我有一个方法来检查类型是否是通用的,然后检查GenericTypeDefinition是否是IEnumerable 。 static Type GetEnumerableType(Type type) { if(type.IsGenericType) { var genericTypeDefinition = type.GetGenericTypeDefinition(); if (genericTypeDefinition == typeof(IEnumerable)) { return type.GetGenericArguments()[0]; } } return null; } 如果它是一个IEnumerable,它就像一个魅力。 如果GenericTypeDefinition是IList或List则它不起作用。 我试过了.. typeof(IEnumerable).IsAssignableFrom(genericTypeDefinition) ..没有成功。 当然必须有更好的方法然后链接其他语句?

generics和System.Collections

迁移到.NET 2.0+后,有没有理由继续使用systems.Collections命名空间(除了维护遗留代码)? 是否应该始终使用generics命名空间?