标签: ienumerable

如何将多个IEnumerable列表组合在一起

我有一个具有IEnumerable属性的类(ClassA).然后我有另一个具有相同属性的类(ClassB).他们正在共享一个接口(InterfaceA).ClassB基本上是多个ClassA的容器类.如何为ClassB实现该属性.

interface InterfaceA
{
    IEnumerable<int> MyInts
    {
        get;
    }
}

class ClassA : InterfaceA
{
    public IEnumerable<int> MyInts
    {
        get;
        private set;
    }
}

class ClassB : InterfaceA
{
    ClassA[] classAs = new ClassA[10];
    public IEnumerable<int> MyInts
    {
        get
        {
            //What goes here ?
            classAs.SelectMany(classA => classA.MyInts);
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用LINQ select语句,但这不起作用.

编辑:看起来我看起来不够努力.答案就在这个问题上. 如何聚合T的多个IEnumebles

编辑2:包含适合我的示例代码,包括其他人需要它.

c# linq ienumerable

14
推荐指数
1
解决办法
8586
查看次数

在哪些情况下IEnumerable <T> .Count优化?

使用反射器我注意到该System.Linq.Enumerable.Count方法有一个条件来优化它,因为IEnumerable<T>传递实际上是一个ICollection<T>.如果转换成功,则Count方法不需要迭代每个元素,但可以调用ICollection的Count方法.

基于此,我开始认为IEnumerable<T>可以像集合的只读视图一样使用,而不会出现我最初基于API的性能损失.IEnumerable<T>

我感兴趣的是,CountIEnumerable<T>a是一个Select语句的结果时,仍然保持优化ICollection,但是基于反映的代码,这种情况没有被优化,并且需要遍历所有元素.

你从反射器得出相同的结论吗?缺少这种优化背后的原因是什么?我似乎在这个常见的操作中浪费了很多时间.即使可以在不这样做的情况下确定Count ,规范是否要求评估每个元素?

c# optimization ienumerable count

14
推荐指数
1
解决办法
1561
查看次数

如何在GridView中启用IEnumerable数据的自动排序?

如何启用我的BLL的自动排序,返回列表,CustomerList:GridView中的列表?

Customer是我自己的强类型类,CustomerList是客户列表.

我知道一种方法是在GridView中将AllowSorting属性设置为true并处理OnSorting事件并调用在CustomerList类中定义的排序方法.

但是我想要一个自动解决方案,我不需要处理OnSorting事件,它应该像GridView如何处理DataView,DataTable和DataSet的自动排序.

我需要在CustomerList或Customer类上实现一个能够实现该功能的接口吗?

alt text http://img260.imageshack.us/img260/3373/aa479347gridviewfg21enu.gif

c# asp.net sorting ienumerable gridview

14
推荐指数
1
解决办法
1万
查看次数

序列化LINQ IEnumerable的结果

我有一个简单的值类型:

    [Serializable]
    private struct TimerInstance
    {
        public TimerInstance(string str, long nTicks)
        {
            _name = str;
            _ticks = nTicks;
        }

        private readonly string _name;
        private readonly long _ticks;

        public string Name { get { return _name; } }
        public long Ticks { get { return _ticks; } }

        public override string ToString()
        {
            return string.Format("{0,20}: {1,10:N}", Name, Ticks);
        }
    }
Run Code Online (Sandbox Code Playgroud)

你会注意到它是可序列化的.然后我列出了这些:

static private List<TimerInstance> _Timers = new List<TimerInstance>();
Run Code Online (Sandbox Code Playgroud)

和一个LINQ方法,从列表中消除最低5%和前5%的计时器:

// Return items that should be persisted.  By convention, we are eliminating …
Run Code Online (Sandbox Code Playgroud)

c# linq ienumerable

14
推荐指数
1
解决办法
2万
查看次数

从IEnumerable获取头部和尾部,只能迭代一次

我有一系列元素.该序列只能迭代一次并且可以是"无限的".

获得这样一个序列的头部和尾部的最佳方法是什么?

c# linq ienumerable

14
推荐指数
1
解决办法
4041
查看次数

IEnumerable&Good Practices(&WCF)

IEnumerable在您不需要实际添加删除内容但仅枚举它们时,使用应用程序范围是一个好习惯吗?

侧问题:你曾经有返回任何问题,IEnumerable<T>从WCF服务?这会给客户端应用程序带来问题吗?毕竟,我认为这将序列化为一个数组.

.net c# ienumerable wcf

14
推荐指数
2
解决办法
6278
查看次数

在IEnumerable <T>中选择偶数/奇数元素?

可能重复:
使用LINQ 获取序列的奇数/偶数部分
如何从List <T>中获取每个第n项?

我正在使用HtmlAgilityPack和C#来解析一些HTML.

<div id="post-8266">
<div class="ruler"> </div>
<div id="post-8266">
<div class="ruler"> </div>
<div id="post-8266">
<div class="ruler"> </div>
<div id="post-8266">
<div class="ruler"> </div>
Run Code Online (Sandbox Code Playgroud)

基本上,我有这些元素,每个元素都在自己的对象中,在IEnumerable中.

是否有一种优雅的方式来获取集合中的每个N/2元素.意思是,用课跳过每个div .ruler

我需要遍历生成的集合,因此要么将每个找到的对象复制到新的IEnumerable中,要么在foreach函数中使用它内联.

例如:

//Copying resulting set to new IEnumerable<T>:
var odds = elements.SelectOdds();

//Using it inline for my usage:
foreach (var x in elements.SelectOdds())
{   
}
Run Code Online (Sandbox Code Playgroud)

哪种选择最好,我怎样才能做到这一点?

c# linq ienumerable .net-4.0

14
推荐指数
2
解决办法
1万
查看次数

C#listbox集合语法

虽然学习C#非常快,但我对这个Collection语法问题感到磕磕绊绊.

我将自己类型MyItem的一些对象添加到listbox lstData.现在我需要在这个列表框中搜索并想到使用优雅的LINQ表示法,如:

lstData.Items.Where(x => x.Text == SearchString)
Run Code Online (Sandbox Code Playgroud)

但是列表框的项目没有.Where(),尽管我确实包含了"using System.Linq;" 命名空间.

所以我尝试过:

foreach (MyItem item in (MyItem)lstData.Items)
Run Code Online (Sandbox Code Playgroud)

但这会产生构建错误:无法将类型'System.Windows.Forms.ListBox.ObjectCollection'转换为'MySandbox.frmListboxDemo.MyItem'.

我确实设法写了一些可行的东西:

        for (int i = 0; i < lstData.Items.Count; i++)
        {
            MyItem item = (MyItem)lstData.Items[i];
            if (item.Text == SearchString)
            {
                lstData.SetSelected(i, true);
                break;
            }
        }
Run Code Online (Sandbox Code Playgroud)

和类似的版本:

        var item_enum = lstData.Items.GetEnumerator();
        while (item_enum.MoveNext()) { etc etc... }
Run Code Online (Sandbox Code Playgroud)

结果证明是2行更长,并且没有找出什么可以取代'var'.

我不太确定我是否理解如何使用Collections,ObjectCollections,Enumerators等,但我很想学习.特别是如果.here()版本是可能的和/或更好的.


谢谢你的所有答案.我最终得到了这个解决方案:

        var item_iter = lstData.Items.Cast<MyItem>()
                          .Where(x => x.Text.Trim().ToLower() == txtItemName.Text);
        foreach (MyItem item in item_iter)
        {
            int i = lstData.Items.IndexOf(item);
            lstData.SetSelected(i, true);
            break;
        } …
Run Code Online (Sandbox Code Playgroud)

c# linq collections ienumerable listbox

14
推荐指数
2
解决办法
1万
查看次数

何时使用IEnumerable vs IObservable?

你如何确定方法是否应该返回IEnumerable<T>IObservable<T>

为什么我会选择一种范式而不是另一种?

.net c# ienumerable system.reactive

14
推荐指数
3
解决办法
4943
查看次数

为什么编译器生成的"yield"枚举器不是struct?

编译器生成实施IEnumerator/ IEnumerable用于yield方法和吸气剂似乎是一个类,因此,被分配在堆上.但是,其他.NET类型例如List<T>专门返回struct枚举器以避免无用的内存分配.通过对C#In Depth帖子的快速概述,我认为没有理由说这也不是这里的情况.

我错过了什么吗?

c# heap ienumerable struct yield

14
推荐指数
2
解决办法
777
查看次数