Tag: generics

在强制执行T类型的同时,将通用类型“强制转换为T”

我想在这里错过了一个技巧,我不敢相信我以前从未这样做过。 但是,如何使用as关键字转换generics类型? [Serializable] public abstract class SessionManager where T : ISessionManager { protected SessionManager() { } public static T GetInstance(HttpSessionState session) { // Ensure there is a session Id if (UniqueId == null) { UniqueId = Guid.NewGuid().ToString(); } // Get the object from session T manager = session[UniqueId] as T; if (manager == null) { […]

C#generics:简化类型签名

如果我有一个通用的Item类,如下所示: abstract class Item { } 和一个看起来像这样的项目容器: class Container where TItem : Item { } 由于TItem依赖于T,是否可以简化Container的类型签名,使其只需要一个类型参数? 我真正想要的是这样的: class Container where TItem : Item // this doesn’t actually work, because Item takes a type parameter { } 所以我可以实例化如下: class StringItem : Item { } var good = new Container(); var bad = new Container(); 当TItem是StringItem时,编译器应该能够推断T是字符串,对吧? 我该如何做到这一点? […]

C#:“漂亮”的类型名称function?

在generics类型的情况下,System.Type类的名称属性返回奇怪的结果。 有没有办法以更接近我指定方式的格式获取类型名称? 示例: typeof(List).OriginalName == “List”

获取通用列表中对象的索引

我有一个自定义对象列表,每次删除一个对象我需要知道它的索引时,有两个属性作为标识符(IDa,IDb)。 如何在不循环所有列表的情况下获取对象的索引? List list =new List(); list.RemoveAll((MiniMapRecord p) => p.IDa == IDa.SystemID & p.IDb == pInputRecordMap.IDb);

使用Generics获取随机数据

我们的unit testing之一是使用随机数据填充业务对象中的属性。 这些属性具有不同的内在类型,因此我们希望使用generics的function来返回您传入的类型的数据。有些内容如下: public static T GetData() 你会怎么去接近这个? 低级别界面会起作用吗? (IConvertible)

如何在列表中应用多个过滤条件(同时)?

我使用.Net 4.0框架跟随C#代码。 这是在参考规范模式后由Jeff Perrin创建的 在GetProducts()中,要使用的条件在方法内定义(硬编码)。 还有另一种名为GetProductsBasedOnInputFilters()方法。 在此方法中,规范列表作为方法的参数。 题 在此方法中,在产品列表中应用这些filter的最佳方法是什么? 注意 :我尝试在foreach循环中应用FindAll子句并将结果添加到list 。 但是这种逻辑是不正确的 – 只需要返回那些满足所有条件的项目。 注意 :productSpeifications列表中的规格数量会因用户输入而异 注意 :“ 为Any()方法动态构建LINQfilter? ”中提到的方法似乎很有用。 但是我不知道如何在这里使用这种方法,因为我正在处理specifications列表; 不是generic delegates 。 过滤方法 public static class ProductFilterHelper { public static List GetProducts(List list) { double priceLimit = 100; //FIRST:: //List selectedList = list.FindAll(new OnSaleSpecification().IsSatisfiedBy); //SECOND:: //AndSpecification spec = new AndSpecification(new OnSaleSpecificationForProduct(), new […]

如何枚举实现通用接口的所有项目?

我有两个接口,一个generics和一个非generics,具有inheritance层次结构: public interface IGenericRelation : IRelation public interface IRelation 通用的是由几个动态加载的服务器控件实现的,我希望枚举实现此接口的控件集合。 我可以做以下事情 foreach (IRelation relationControl in this.uiPlhControls.Controls.OfType<IRelation) { … } 但我真正希望能做的是…… foreach (IGenericRelation relationControl in this.uiPlhControls.Controls.OfType<IGenericRelation) { … } 然后能够将relationControl与它提供的类型一起使用,然后我就可以访问IGenericRelation上可用的强类型属性。 不幸的是,这是不可能的,因为我似乎无法省略类型参数。 有没有人知道枚举实现通用接口的控件的方法,以防止我必须编写几个循环而不是一个循环? 或许使用reflection?

从通用列表中删除属性/列

由于某种原因,我无法更改查询,因此我必须在C#中执行此操作。 我上课了: public class myClass { int id { get; set; } string name { get; set; } DateTime sDate { get; set; } bool status { get; set; } } 我得到的数据是在这个列表中获取的。 现在我想要的是从具有null值的列表中删除这些属性。 我可能听起来很疯狂,但你读得对。 我想过只创建一个只包含所选属性的列表,但上述任何属性都可以为null 。 所以我必须设计一种机制来基于此过滤我的列表。 为了更清楚,请考虑以下示例。 List lstClass = some data source. 获取数据后,通用列表(lstClass)看起来像这样。考虑表中的结果集: Id Name Sdate status 1 a null null 2 b […]

如何有效地从List 中删除(C#)?

如果我理解正确(如果我错了请纠正我),列表是由.NET中的数组实现的,这意味着列表中每个项目的删除都会导致重新分配所有列表(这反过来意味着O(n) )。 我正在开发一款游戏,在游戏中我有许多子弹在任何给定时刻在空中飞行,让我们说100个子弹,每帧我移动几个像素并检查与游戏中物体的碰撞,我需要删除从列表中每个碰撞的子弹。 所以我在另一个临时列表中收集了碰撞的子弹,然后执行以下操作: foreach (Bullet bullet in bulletsForDeletion) mBullets.Remove(bullet); 因为循环是O(n)并且删除是O(n) ,所以我花费O(n^2 )时间来移除。 有没有更好的方法来删除它,或更合适的集合使用?

用lambda表达式参数调用generics方法的reflection

我正在寻找一种方法来调用带有lambda表达式的generics方法,该表达式在一个项目数组中调用Contains。 在这种情况下,我正在使用Entity Framework Where方法,但该方案可以应用于其他IEnumerables。 我需要通过Reflection调用上面代码的最后一行,所以我可以使用任何类型和任何属性传递给Contains方法。 var context = new TestEntities(); var items = new[] {100, 200, 400, 777}; //IN list (will be tested through Contains) var type = typeof(MyType); context.Set(type).Where(e => items.Contains(e.Id)); //**What is equivalent to this line using Reflection?** 在研究中,我注意到我应该使用GetMethod,MakeGenericType和Expression来实现这一点,但我无法弄清楚如何去做。 有这个样本非常有帮助,所以我可以理解Reflection如何与Lambda和Generic概念一起工作。 基本上,目标是编写一个正确版本的函数,如下所示: //Return all items from a IEnumerable(target) that has at least one matching […]