Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 这是假的吗;可能的多重枚举“;?_C#_Resharper - Fatal编程技术网

C# 这是假的吗;可能的多重枚举“;?

C# 这是假的吗;可能的多重枚举“;?,c#,resharper,C#,Resharper,我有一个IEnumerable选项。我需要totalCount(最大选项数),但我只想显示15个 这段代码性能差吗?Re#说可能的多重计算,但我的直觉说这是错误的 IEnumerable<someclass> options = from entry in someList select new SomeClass { Id = entry.id, Value = entry.term }; var totalOptions = options.Count(); var resul

我有一个
IEnumerable
选项。我需要
totalCount
(最大选项数),但我只想显示15个

这段代码性能差吗?Re#说可能的多重计算,但我的直觉说这是错误的

IEnumerable<someclass> options = from entry in someList select new SomeClass
{ Id = entry.id,
Value = entry.term
};

var totalOptions = options.Count();
var results = options.skip(10).take(15);
IEnumerable options=从someList中的条目选择new SomeClass
{Id=entry.Id,
Value=entry.term
};
var totalOptions=options.Count();
var结果=选项。跳过(10)。获取(15);

您当前正在对它进行一次迭代,以获得
计数
,然后再次获得
跳过
获取
。在计算时,您也在毫无意义地执行投影。解决所有这些问题是完全可行的,尽管相当难看。这里的代码应该可以工作(尽管它完全未经测试),并且更高效,只需迭代一次

//注意:这应该在静态非泛型顶级类中。
公共静态列表SkipTakeSelectCount(
这是一个数不清的来源,
int skip,
int take,
函数选择器,
输出整数计数)
{
列表页=新列表();
计数=0;
foreach(源中的var项)
{
计数++;
如果(跳过>0)
{
跳过--;
}
否则如果(取>0)
{
拿——;
第页添加(选择器(项目));
}
}
返回页面;
}
你可以这样称呼它:

var results=someList.SkipTakeSelectCount(
跳10分,跳15分,
entry=>newsomeclass{Id=entry.Id,Value=entry.Term},
不包括所有选择);

怎么会是假的
Count()
将枚举它,然后用
Skip
重新开始。也许这没关系,但这绝对不是一个误报。是的,你是对的。但我确实需要全部计数和跳过/执行分页。我相信没有别的办法,只能列举两次:)是的,有,但需要更多的工作。您可以跳过前10项,记住接下来的15项,然后计算(但不保留)剩余的项。请注意,计数时,您可能也不需要执行投影。。。在理想世界中,你不会产生垃圾。(因此,转换您实际获得的页面,而不是源代码。)如果您不担心此代码的性能,您可以忽略警告-否则,我可以编写一些更高效的代码。一些代码示例将非常好,Jon!完成。有点难看,但是嘿。。。