如何将集合的子集传递给C#方法? 在C++中,每当我想处理某个范围的项目时,我会这样做: template<class Iterator> void method(Iterator range_begin, Iterator range_end); List<string> lst = new List<string>(); lst = lst.Where(str => str == "Harry" || str == "John" || str == "Joey").ToList(); 模板 void方法(迭代器范围\开始,迭代器范围\结束);

如何将集合的子集传递给C#方法? 在C++中,每当我想处理某个范围的项目时,我会这样做: template<class Iterator> void method(Iterator range_begin, Iterator range_end); List<string> lst = new List<string>(); lst = lst.Where(str => str == "Harry" || str == "John" || str == "Joey").ToList(); 模板 void方法(迭代器范围\开始,迭代器范围\结束);,c#,.net,C#,.net,在C#中是否有这样一种方便的方法,不仅适用于System.Array,也适用于其他集合类?如果使用LINQ,请查看跳过和获取/。。。 // ... using System.Linq; IEnumerable<T> GetSubset<T>( IEnumerable<T> collection, int start, int len ) { // error checking if desired return collection.Skip

在C#中是否有这样一种方便的方法,不仅适用于
System.Array
,也适用于其他集合类?

如果使用LINQ,请查看
跳过
获取

/。。。
// ...
using System.Linq;

IEnumerable<T> GetSubset<T>( IEnumerable<T> collection, int start, int len )
{
    // error checking if desired
    return collection.Skip( start ).Take( len );
}
使用System.Linq; IEnumerable GetSubset(IEnumerable集合、int start、int len) { //如果需要,进行错误检查 返回收集。跳过(开始)。获取(len); }
这与使用LAMBDA表达式对列表子集不一样吗

public myClass {
    public int Year { get; set; }
    ...
}
然后

List<myClass> allClasses = db.GetClasses();
IEnumerable<myClass> subsetClasses = allClasses.where(x => x.Year >= 1990 && x.Year <= 2000);

processSubset(subsetClasses);
List allClasses=db.GetClasses();

IEnumerable subsetClass=AllClass。其中(x=>x.Year>=1990&&x.Year您可以使用IEnumerable并将值作为LINQ查询传入吗

void MyMethod<T>(IEnumerable<T> workSet) {
    foreach (var workItem in workSet) {
        doWorkWithItem(workItem);
    }
}

var dataset = yourArray.SkipWhile(i=>i!=startItem).TakeWhile(i=>i!=endItem);
MyMethod(dataset);

var pagedSet = yourArray.Skip(pageSize * pageNumber).Take(pageSize);
MyMethod(pagedSet);
void MyMethod(IEnumerable工作集){
foreach(工作集中的var工作项){
doWorkWithItem(工作项);
}
}
VarDataSet=yourArray.SkipWhile(i=>i!=startItem).TakeWhile(i=>i!=endItem);
MyMethod(数据集);
var pagedSet=yourArray.Skip(pageSize*pageNumber).Take(pageSize);
MyMethod(pagedSet);

目前我想不出任何方法,但使用LINQ,您可以轻松创建一个
IEnumerable
,表示您收藏的一部分

据我所知,C#方法是将集合的一部分视为集合本身,并使您的
方法
处理此序列。这种想法允许该方法不知道它是处理整个集合还是其一部分

示例:

void method(IEnumerable<T> collection)
{ ... }

// from 2-nd to 5-th item:
method(original.Skip(1).Take(4));
// all even items:
method(original.Where(x => x % 2 == 0));
// everything till the first 0
method(original.TakeWhile(x => x != 0));
// everything
method(original);

<>在C++中,你的代码计算迭代器以传递它们,并标记序列的开始和结束。在C语言中,你通过轻量级<代码> iQueabd s。由于懒惰的评估,这不应该有开销。

< P>这取决于你使用的是哪种类型的集合。一些比其他的更有能力。在列表中,您可以执行以下操作:

template<class Iterator>
void method(Iterator range_begin, Iterator range_end);
List<string> lst = new List<string>();
lst = lst.Where(str => str == "Harry" || str == "John" || str == "Joey").ToList();
List lst=new List();
lst=lst.Where(str=>str==“Harry”| | str==“John”| | str==“Joey”).ToList();