Tag: ienumerable

编辑界面时它叫什么?

我正在浏览LitJSON库。 在代码中有很多段,如 public class JsonData : IJsonWrapper, IEquatable #region ICollection Properties int ICollection.Count { get { return Count; } } #end region 对于我知道覆盖/重载如何工作的方法,但在上面的示例中,代码为:int ICollection.Count 我不熟悉方法签名的格式。 编码器是否试图明确声明其ICollection.Count接口? 你能解释一下这是什么“被称为”(它是否仍在重写?)。

IEnumerable null合并扩展

在经过foreach或LINQ查询迭代之前,我经常面临检查IEnumerable是否为null的问题,然后我经常会遇到这样的代码: var myProjection = (myList ?? Enumerable.Empty()).Select(x => x.Foo)… 因此,我想将此扩展方法添加到Extensions类: public static class MyExtensions { public static IEnumerable AsEmptyIfNull(this IEnumerable source) { return source ?? Enumerable.Empty(); } } 在我看来这个代码时会立即出现一个小问题,即,考虑到扩展方法的“实例方法方面” ,它应该仅仅作为一个静态方法来实现,否则这样的东西是完全合法的: IEnumerable list = null; list.AsEmptyIfNull(); 你看到使用它有任何其他缺点吗? 如果大量使用,这种扩展会导致开发人员出现某种不良趋势吗? 奖金问题: 你能建议一个更好的名字吗? 🙂 (英语不是我的第一语言,那么我在命名方面不太好…) 提前致谢。

如果从未发生yield return,则返回null吗?

该方法通过yield return语句返回IEnumerable。 如果yield语句永远不会发生(它在条件逻辑中),方法是返回null,还是返回计数为0的Enumerable?

来自IEnumerable的foreach中特定类型的对象

我正在使用只实现非通用IEnumerable和ICollection的旧集合对象。 当我尝试将此对象与foreach在foreach表达式的LHS上给出更具体的类型时,该对象究竟发生了什么? // LegacyFooCollection implements non-generic IEnumerable LegacyFooCollection collection = GetFooCollection(); foreach (Foo f in collection) { // etc. } 我知道(因为我已经尝试过了)当collection所有东西都是Foo类型时,这是安全的,但如果失败会发生什么?

可以混合对象初始化器和集合初始化器吗?

我按照此处的说明使用IEnumerable定义了一个集合初始化程序: http : //msdn.microsoft.com/en-us/library/bb384062.aspx 现在我可以在我的集合初始化程序中创建对象,并且我们可以像我这样添加Add()方法: class ArrangedPanel : RectElement { private List arrangedChildren = new List(); public int Padding = 2; public void Add(RectElement element) { arrangedChildren.Add(element); //do custom stuff here } public IEnumerator GetEnumerator() { return arrangedChildren.GetEnumerator(); } } // Somewhere debugPanel.Add(new ArrangedPanel() { new ButtonToggle(), new ButtonToggle() }); 但是,如果我尝试设置属性,例如我的“填充”字段,我会在集合初始值设定项上出错。 debugPanel.Add(new ArrangedPanel() { Padding […]

这两种算法之间是否存在改变IEnumerable的性能差异?

这两个问题给出了改组IEnumerable的类似算法: C#:使用Random和OrderBy是一个很好的shuffle算法吗? 你可以在C#中乱序列举一个集合吗? 以下是两种方法并排: public static IEnumerable Shuffle1 (this IEnumerable source) { Random random = new Random (); T [] copy = source.ToArray (); for (int i = copy.Length – 1; i >= 0; i–) { int index = random.Next (i + 1); yield return copy [index]; copy [index] = copy [i]; } } public […]

为什么Reverse for List和IEnumerable有两个完全不同的版本?

对于List对象,我们有一个名为Reverse()的方法。 它反转了“就地”列表的顺序,它不会返回任何内容。 对于IEnumerable对象,我们有一个名为Reverse()的扩展方法。 它返回另一个IEnumerable。 我需要以相反的顺序遍历列表,所以我不能直接使用第二种方法,因为我得到一个List,我不想反转它,只是向后迭代。 所以我可以这样做: for(int i = list.Count – 1; i >=0; i–) 要么 foreach(var item in list.AsEnumerable().Reverse()) 我发现它的可读性低于我拥有IEnumerable时的可读性 foreach(var item in list.Reverse()) 我无法理解为什么这两种方法以这种方式实现,名称相同。 这很令人讨厌和困惑。 为什么在Reverse()中没有一个名为BackwardsIterator()的扩展名为所有IEnumerable工作? 我对这种选择的历史原因非常感兴趣,而不是“怎么做”的东西!

在IEnumerable上使用Observable Collection的优点和缺点

我试图决定是否要将所有IEnumerable集合切换到Observable Collections。 我找不到对此的好解释。 可理解的术语中Observable Collection的优点和缺点是什么?

C#:如何实现IOrderedEnumerable

我想为练习实现一些不同的算法,只是为了看看我到底有多糟糕并且变得更好:p 无论如何,我想我会尝试使用IEnumerable和IOrderedEnumerable以及其他.Net集合类型来兼容(这样我写的东西以后可以更容易使用)。 但是除了使用OrderBy和ThenBy扩展方法之外,我找不到返回IOrderedEnumerable实例的方法。 所以我想我必须创建自己的类来实现这个接口。 但说实话,界面对我来说并不合理。 可能,但我不确定。 我创建了一个空类,添加了接口,然后让ReSharper为我添加空实现。 它看起来像这样: class MyOrderedEnumerable : IOrderedEnumerable { /// /// Performs a subsequent ordering on the elements of an according to a key. /// /// /// An whose elements are sorted according to a key. /// /// The used to extract the key for each element.The used to compare keys […]

为什么XmlSerializer需要从IEnumerableinheritance的类型具有Add(System.Object)的实现?

我正在使用xml序列化,但现在遇到了一个我以前没见过的运行时错误。 “要成为XML可序列化的,从IEnumerableinheritance的类型必须在其inheritance层次结构的所有级别都具有Add(System.Object)的实现.ImageEditor.EffectOptions不实现Add(System.Object)” 通过运行时exception强制实现方法似乎有点奇怪,而不是编译时间错误,例如实现的接口缺少方法。 这是设计的吗? 这不应该通过某种类型的接口强制执行,如XmlSerializable等? 除此之外,我想知道序列化程序是否保证传递正确类型的值,我可以将其转换为类型,在我的例子中是EffectOption 。 或者我应该实现这个Add (object)方法来查看对象是否是EffectOption类型,如果没有抛出exception? 我之前没有实现过这个Add (object)方法,但是我的猜测是将它转换为EffectOption并将其添加到EffectOptions集合更安全。 编辑:这是类型本身: public class EffectOptions : IEnumerable { public List Options { get; private set; } //IEnumerable methods }