Tag: generics

不太通用的generics? C#generics算术的一种可能解决方案

目前,C#中的generics不允许任何理智的方式来执行算术。 有一些尴尬的解决方法,但它们都不是很整洁,所有这些都会降低性能。 根据这次访谈 ,不可能实现具有算术类型的接口,因此建议使用这样的解决方法。 但你可以做的是让你的矩阵作为计算器的参数,并在计算器中,有一个名为multiply的方法。 你去实现它,然后将它传递给Matrix。 为什么我必须告诉高级编程语言如何添加和增加数字? [由于受欢迎的需求而编辑] 为什么不简单地允许将Generic限制为类型列表? 例如。 class Matrix where T : int,long,float,double 语法当然可以是不同的。 但是编译器只需要检查类型是否在列表中,并且所使用的运算符适用于所有类型,这应该比显然太难的接口建议简单得多。 是否有任何明显的原因导致无法实施?

为什么Nullable 不匹配作为generics约束的引用类型

可能重复: Nullable类型作为通用参数可能吗? 我遇到了generics类型约束非常奇怪的事情。 我有一个这样的课: public SomeClass where T:class { } 但是,我发现我不能像我期望的那样使用可空类型: new SomeClass(); 我得到一个int?的错误int? 必须是参考类型。 Nullable真的只是一个带有语法糖的结构,使它看起来像一个引用类型吗?

C#generics:约束T,其中T:Object不编译; 错误:约束不能是特殊类’对象’

当我约束T:对象像这样: public interface IDoWork where T : Object { T DoWork(); } 我收到错误: 约束不能是特殊类’对象’ 这是否意味着与编译的以下内容存在隐含的差异? public interface IDoWork // where T : Object { T DoWork(); }

使用LINQ创建List ,其中T:someClass

这与我的C#Generic List转换为实现List 的类的先前问题有关 我有以下代码: public abstract class DataField { public string Name { get; set; } } public class DataField : DataField { public T Value { get; set; } } public static List ConvertXML(XMLDocument data) { result = (from d in XDocument.Parse(data.OuterXML).Root.Decendendants() select new DataField { Name = d.Name.ToString(), Value = d.Value }).Cast().ToList(); return […]

如何在C#中一般实例化generics类?

也许这很简单,但我没有使用类型Type和它的用途。 假设我想用T = Double或T = UInt32创建List ,具体取决于某些函数的结果,比如public static Type CheckType(String input); 在代码中: Type t = Program.CheckType(someInput); // it returns typeof(Double) or typeof(UInt32) if (t == typeof(Double)) List l = new List(); else List l = new List(); 我知道上面的代码不会编译,因为我让l有两个不同的含义(一个double列表和一个unsigned int列表)……所以它引出了我的问题 : 有没有办法在上面的代码中避免使用if ? 与此类似的东西: Type t = Program.CheckType(someInput); List l = new List(); // I know […]

如何随机播放List

我发现维基百科上的这段Java代码应该在适当的位置改组: public static void shuffle (int[] array) { Random rng = new Random(); int n = array.length; while (n > 1) { n–; int k = rng.nextInt(n + 1); int tmp = array[k]; array[k] = array[n]; array[n] = tmp; } } 虽然我没有测试代码,但它看起来应该可以正常使用数组。 在我的C#项目中,我创建了一个CardSet类,并在Shuffle()方法中使用了上面的代码: public class CardSet { private List cards; public Card this[int i] { […]

如何形成我的节点和树通用类

我有一个IList Category类型来自SQL Server中的Category表: 表:类别 CategoryID,ParentCategoryID 在一张桌子上如此典型的层次结构。 因此,如果我有这个包含节点关系的类别的IList,那么我试图弄清楚这是如何适合制作像很多人一样的节点和树。 那么构造函数看起来会如何根据用法创建这个类? 我对Generics来说并不是一个很难的核心。 我认为在这里创建一个通用的Node类和Tree类是有道理的,所以我可以在将来重用其他树类型。 所以如果我有这样的东西,T如何被使用以及我从中获益? (伪代码在这里) public class Node … Node _parentNode; List<Node> _children; private void SetParentNode(T) private void AddChild(T) … etc. 试图理解这里的概念,为什么Generic Node类将用于像Childeren等进入的任何类型,包含子/父关系(int Ids) UPDATE 所以在这里遇到GroupBy建议的问题。 看看我试图用你的例子做什么: 首先,我在Tree类中拥有此属性: public Dictionary,IList >> ParentNodeAndRelatedChildrenFlattenedMap {get; 私人集; } 并且传入我的类的构造函数是一个IList依赖项,我转换(循环并为它们中的每一个创建一个新的Node)到IList> 现在我正在尝试通过Node.ParentId对该列表进行分组,以便我在父节点上进行分组,并且由于每个节点都有其子属性,因此很容易找出相关子节点对这些父节点的影响。 但是现在问题出现在我的代码中: public void CreateFlattenedMap() { var parentGroups = _nodeDependencies.GroupBy(d => d.ParentNodeId); […]

哪一个更快List 或ArrayList ?

可能重复: .NET:ArrayList vs List 你好, 我在网上搜索并发现我的冲突答案,到目前为止还不清楚,哪一个更快List or ArrayList ,原因是什么? 我猜List应该更快但不确定,因为在这种特定情况下,甚至ArrayList也被标记为generics类型。 非常感谢,Mani

了解.Net Generics – Bank Domain

这是尝试学习generics(使用.Net 4.0)。 我已经编程了大约4。5年。 直到现在我还没有在实时项目中使用generics。 我一直在做的是阅读一些关于generics的文章并尝试理解它。 问题是 – 他们中的大多数试图解释generics的各种语法。 他们用例如方形,圆形和形状的例子来解释。 现在我有机会设计一个小应用程序。 我想在那里使用generics。 [我确实看到generics在我的新项目中成为一个好候选人的机会很大] 我现在想出的是来自Bank域的一个例子,旨在理解generics。 我想了解以下4。 1)通用类 2)通用方法 3)通用接口 4)通用代表 编辑:类型独立的操作是generics的良好候选者。 这是我在以下示例中遗漏的最重要的一点。 我为“通用类”创建了一个示例。 你能帮忙用银行域名帮助其他三个项目的简单例子吗? 注意:在使用Generic类时,我发现它在Open-Closed Principle中有所帮助。 即使我添加新帐户类型,generics类也需要更改。 不断变化的逻辑(利息计算)进入特定的类。 注意:在下面,语法可能不正确,因为它在没有Visual Studio的情况下键入它。 但这个概念很好。 编辑: “AccountManager”会根据其角色成为“BankAccount”类的更好名称吗? 这是什么样的反模式? 通用类 – 具有Bank域的示例 Public Interface IBankAccount { Public int Interest; Public Int DepositedAmount; Public int DurationInMonth; } Public class FixedAccount: IbankAccount { Public […]

通用列表包含()性能和替代方案

我需要存储大量的键值,其中键不唯一。 键和值都是字符串。 物品数量约为500万。 我的目标是只保留唯一的对。 我试图使用List<KeyValuePair> ,但Contains()非常慢。 LINQ Any()看起来快一点,但仍然太慢。 是否有任何替代方法可以更快地在通用列表上执行搜索? 或者也许我应该使用另一个存储?