jjzjj

Generics

全部标签

c# - Action<T> 还是 Action<in T>?

我在MSDN上阅读有关ActionDelegate的信息所以这符合语法publicdelegatevoidAction(Tobj);比我看的c-sharpcorner.com它使用了这种语法publicdelegatevoidAction(Tobj);如您所见,T之前没有in。哪种语法是正确的,in是什么意思?编辑:用于Predicate的相同语法。谢谢。 最佳答案 in和out(通用逆变和协变)仅在C#4中引入,委托(delegate)和接口(interface)针对.NET4进行了修改-所以Action在.NET3.5中变为Ac

c# - C# 中的泛型继承?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:WhycannotC#genericsderivefromoneofthegenerictypeparametersliketheycaninC++templates?我可以publicclassMyGenericClass:DL//buticannotdopublicclassMyGenericClass:T我该怎么做第二个?如果我做不到,我该怎么做publicclassMyGenericClass{Tobj;//haveallMyGenericClass.XYZcallobj.XYZ}

c# - 值类型存储在 (C#) 泛型集合中的什么位置

的确,对于值类型,泛型集合比非泛型集合表现得更好。(即List与ArrayList)。但为什么会这样,除了装箱-拆箱步骤?一旦添加到集合中,值类型对象存储在哪里?在非泛型集合中,它们会被装箱并存储在堆上,泛型有什么不同? 最佳答案 在泛型中,例如List,它们仍然存储在堆中。不同之处在于,在内部,一个List制作一个整数数组,并可以直接存储数字。使用ArrayList,您最终会存储一个对装箱整数值的引用数组。 关于c#-值类型存储在(C#)泛型集合中的什么位置,我们在StackOverf

c# - 动态使用泛型是不可能的吗?

这个问题在这里已经有了答案:HowdoIusereflectiontocallagenericmethod?(8个答案)关闭8年前。我需要在运行时创建一个使用泛型的类的实例,比如class,之前不知道他们将拥有的T类型,我想做这样的事情:publicDictionaryGenerateLists(Listtypes){Dictionarylists=newDictionary();foreach(Typetypeintypes){lists.Add(type,newList());/*thisnewList()doesn'twork*/}returnlists;}...但是我不能。我认

c# - C# 中通用类的特化模式?

在C#中,有时我希望可以为泛型类的某些“实例化”创建特殊方法。更新:下面的代码只是一个更抽象问题的愚蠢示例——不要过分关注时间序列,只是针对某些T的“添加额外方法”的原则。例子:classTimeseries{...TimeSeriesSlice(...){...}}在T是double的情况下,我想要一些额外的方法,比如Integrate(),Interpolate()等等只对double有意义,因为我需要对它们进行算术运算。有几种方法可以做到这一点,但我找不到一种令我满意的方法。1。继承到一个特殊的类classTimeseriesDouble:Timeseries{doubleInt

c# - : List<T>. Add() 或 System.Array.Resize() 哪个更有效?

我正在尝试确定何时使用List.Add()更有效与使用Array.Resize()相比方法。Array.Resize的文档说它复制了整个数组,并将其放入一个新对象中。旧对象将不得不被丢弃。这个旧对象在哪里?在栈上还是堆上?我不知道List.Add()是如何工作的。有谁知道List.Add方法与静态Array.Resize方法相比如何?我对内存使用(和清理)以及300种值类型和20,000种值类型哪个更好。就其值(value)而言,我计划在.NET的一种嵌入式版本上运行此代码。可能是.NETGadgeteer 最佳答案 你应该使用Li

c# - 如何在不知道 T 是什么的情况下将 T 类型的项目添加到 List<T>?

我正在处理一个事件,该事件传递指向一个列表和一个T新项目的事件参数,我的工作是将新项目添加到列表中。如果不检查我知道T可能是的所有类型,我该如何做到这一点?当前的代码是这样的几十行:privatevoidDataGridCollectionViewSource_CommittingNewItem(objectsender,DataGridCommittingNewItemEventArgse){Typet=e.CollectionView.SourceCollection.GetType();if(t==typeof(List)){Listsource=e.CollectionView

c# - .NET 通用集?

是否有通用容器在.NET中实现“设置”行为?我知道我可以使用Dictionary(并可能添加nulls作为值),因为它的键作为一个集合,但我很好奇是否有现成的东西。 最佳答案 HashSet在.NET3.5中 关于c#-.NET通用集?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/353901/

c# - 泛型类中的方法重载

我正在使用包含以下泛型类重载方法的代码:publicclassA{publicvoidProcess(Titem){/*impl*/}publicvoidProcess(stringitem){/*impl*/}}当为string参数化类时,我是否失去了使用通用参数调用版本的可能性?vara=newA();a.Process("");//Alwayscallsthenon-genericProcess(string) 最佳答案 特定类型优先于通用类型。例如,这是我在LINQPad中测试的内容。voidMain(){newA().Pr

c# - 是否可以创建用于将项目添加到 Entity Framework dbset 的通用方法?

我之前没有使用过EntityFramework或泛型,在减少我的代码时遇到了一些困难。我正在解析一个文本文件以加载10个查找表,其中包含可能每晚都可能更改的数据。文本文件有一个“类型”标题,后跟键/值集列表。我已经完美地工作了,但我想重构代码以清理它,并想使用通用方法来完成它,这样我就可以减少重复的代码。我已经将解析归结为通用方法,但我无法弄清楚如何以通用方式将实体添加到上下文中。我必须遍历每种类型的实体列表并将它们添加到上下文中:voidMain(){switch(line.ToUpper()){case"AREA":{ListareaList=this.GetItems(file)