Tag: generics

非generics类中的generics构造函数是否受支持?

不支持,是否支持,但我必须做一些技巧? 例: class Foo { public Foo<T1,T2>(Func<T1,T2> f1,Func<T2,T1> f2) { … } } generics只用于构造函数,没有依赖于它们的字段/属性,我使用它(generics)来强制执行f1和f2的types关联。 备注 :我find了解决方法 – 静态方法创build,但无论如何,我很好奇,为什么我有直接的方法的问题。

更新通用列表中元素的最佳方法

假设我们有一个名为Dog的类,它有两个string“Name”和“Id”。 现在假设我们有一个有4只狗的列表。 如果你想用“2”的“Id”改变狗的名字,那么最好的办法是什么? Dog d1 = new Dog("Fluffy", "1"); Dog d2 = new Dog("Rex", "2"); Dog d3 = new Dog("Luna", "3"); Dog d4 = new Dog("Willie", "4"); List<Dog> AllDogs = new List<Dog>() AllDogs.Add(d1); AllDogs.Add(d2); AllDogs.Add(d3); AllDogs.Add(d4);

为什么IEnumerable <T>在C#4中是协变的?

在早期版本的C# IEnumerable中定义如下: public interface IEnumerable<T> : IEnumerable 由于C#4的定义是: public interface IEnumerable<out T> : IEnumerable 只是为了让LINQexpression式中的恼人的表演消失吗? 这不会像C#中的string[] <: object[] (破坏数组方差)一样引入相同的问题吗? 从兼容性的angular度来看,如何增加协变? 早期的代码仍然可以在更高版本的.NET上工作,或者在这里重新编译吗? 那反过来呢? 之前的代码是否使用这个接口在所有情况下都是严格不变的,或者现在某些用例可能会有所不同?

将DataTable转换为List <T>

我有一个强types的MyTypetypes的DataTable,我想将它转换成List<MyType> 。 我怎样才能做到这一点 ? 谢谢。

C# – 使用List <T> .Find()与自定义对象

我试图使用一个List<T>与我的自定义类,并能够在列表中使用像Contains() , Find()等方法。 我想我只是要重载运算符==但显然,这样做的一种方法是使用Find()的委托方法… 注意:现在,我重载了Equals()方法来使Contains()方法正常工作,但我仍然无法使Find()函数正常工作。 双方工作的最好方法是什么? 我在Linux上使用最新的C#/ .NET框架版本。 编辑:这是我的代码 using System; namespace GuerreDesClans { public class Reponse : IEquatable<Reponse> { public Reponse () { m_statement = string.Empty; m_pointage = 0; } public Reponse (string statement, int pointage) { m_pointage = pointage; m_statement = statement; } /* * attributs privés */ private string m_statement; private int […]

为一个genericsC#集合中的每个值调用一个函数

我有一个List集合中的整数值的集合。 我想为集合中的每个值调用一个函数,其中一个函数的参数是一个集合值。 没有在foreach循环中做这个…有没有办法用lambda / linqexpression式来实现呢? 像… myList.Where(p => myFunc(p.Value)); ? 在此先感谢,-s

创build一个扩展来从Swift中的数组中过滤nils

我试图写一个扩展到数组,这将允许一个可选的T数组被转换成一个非可选的T数组。 例如,这可以写成这样一个免费的function: func removeAllNils(array: [T?]) -> [T] { return array .filter({ $0 != nil }) // remove nils, still a [T?] .map({ $0! }) // convert each element from a T? to a T } 但是,我不能把它作为一个扩展。 我试图告诉编译器,扩展只适用于可选值的数组。 这是我迄今为止: extension Array { func filterNils<U, T: Optional<U>>() -> [U] { return filter({ $0 != nil }).map({ $0! […]

recursiongenericstypes的实例化在它们嵌套的越深处指数地减慢。 为什么?

注:我可能在标题中select了错误的词语; 也许我真的在 这里 谈论多项式增长。 在这个问题的末尾查看基准testing结果。 让我们从这三个代表不可变堆栈的recursiongenerics接口开始: interface IStack<T> { INonEmptyStack<T, IStack<T>> Push(T x); } interface IEmptyStack<T> : IStack<T> { new INonEmptyStack<T, IEmptyStack<T>> Push(T x); } interface INonEmptyStack<T, out TStackBeneath> : IStack<T> where TStackBeneath : IStack<T> { T Top { get; } TStackBeneath Pop(); new INonEmptyStack<T, INonEmptyStack<T, TStackBeneath>> Push(T x); } 我创build了简单的实现EmptyStack<T> , NonEmptyStack<T,TStackBeneath> 。 更新#1:请参阅下面的代码。 […]

genericstypes的默认值?

是否有可能做类似的事情? public class PriorityQueue<TValue, TPriority=int> where TPriority : IComparable (注意=int )? 在你build议之前,是的,我知道我可以添加另一行: public class PriorityQueue<TValue> : PriorityQueue<TValue, int> { } 但是我想知道是否有可能把它作为参数。

有界通配符和types参数有什么区别?

有没有区别 <N extends Number> Collection<N> getThatCollection(Class<N> type) 和 Collection<? extends Number> getThatCollection(Class<? extends Number>)