我有一个关于这个问题顺序在IEnumerable
.
据我所知,迭代IEnumerable是伪代码可以用以下方式编写:
while (enumerable.HasNext())
{
object obj = enumerable.Current;
...
}
Run Code Online (Sandbox Code Playgroud)
现在,假设,需要对已排序的集合进行操作.可以在这种情况下使用IEnumerable,还是尝试IList
使用索引支持的其他方法(即)?
换句话说:合同是否IEnumerable
一般对订单作出任何保证?
因此,IEnumerable
对于保证排序的通用接口而言,这不是一个合适的方法.新的问题是什么接口或类应该用于带有顺序的不可变集合?ReadonlyCollection
?IList
?它们都包含Add()
方法(甚至没有在前者中实现).
我自己的想法:IEnumerable
不对订购提供任何保证.正确的实现可以在不同的枚举中以不同的顺序返回相同的元素(考虑SQL查询)
我知道LINQ First()
,但如果IEnumerable
不说一下它的排序,这个扩展是没用的.
我与我的同事有一点争议(这非常接近圣战:))关于通过枚举VS通过枚举访问列表的性能.为了操作一些事实,我写了以下测试:
static void Main(string[] args)
{
const int count = 10000000;
var stopwatch = new Stopwatch();
var list = new List<int>(count);
var rnd = new Random();
for (int i = 0; i < count; i++)
{
list.Add( rnd.Next());
}
const int repeat = 20;
double indeces = 0;
double forEach = 0;
for (int iteration = 0; iteration < repeat; iteration++)
{
stopwatch.Restart();
long tmp = 0;
for (int i = 0; i < count; i++)
{
tmp …
Run Code Online (Sandbox Code Playgroud) 我在一些Objective-C代码中有一个整数"myInt".myInt用作布尔值...因此我只对零值或非零值感兴趣.我想快速在零和非零值之间切换.最快的方法是什么?
这是我到目前为止所尝试的:(所有这些工作)
试试1:
// myInt is initialized to 0
if(myInt == 0){
myInt = 1;
}else{
myInt = 0;
}
Run Code Online (Sandbox Code Playgroud)
试试2:
myInt = !myInt;
Run Code Online (Sandbox Code Playgroud)
尝试3:
myInt ^= 0xffffffff;
Run Code Online (Sandbox Code Playgroud)
我意识到我可以用一个分析器来测量性能...但是我决定在SO上问,因为我希望其他人(我自己)可以从这个问题所激发的讨论中学到一些东西.
如何从Sandcastle生成的文档中隐藏从Object类继承的方法(如Equals,Finalize,GetHashCode,GetType等...).我有一个名为LicenseManager的类,它有一个方法,而Object继承的方法会阻塞显示.
我正在使用最新版本的Sandcastle + Sandcastle帮助文件生成器.
c# ×3
ienumerable ×2
performance ×2
.net ×1
collections ×1
list ×1
objective-c ×1
sandcastle ×1