列表<>;ToArray()过程中丢失的项
本文关键字:过程中 lt gt ToArray 列表 | 更新日期: 2023-09-27 17:59:02
不久前,我编写了一个用于收集公共交通中断的系统。有关任何事件的信息都收集在MSSQL数据库中。消费者通过调用.asmx web服务来访问这些数据。使用ADO.NET从数据库中收集数据,然后每个数据行填充一个Deviation对象并添加到列表中。在服务层中,列表被应用ToArray()调用并返回给使用者。
到目前为止,一切都很好。但问题是,在某些情况下(5%左右),我们已经意识到阵列在某种程度上被缩减了。与通常的15-20件商品不同,只有一半甚至更少的商品被退回。其余项目始终位于原始列表的末尾。而且,在数组的开头重复/搅乱几个项目的次数更少。
在对不同的层进行了一些测试之后,缩减似乎发生在过程的末尾,即在转换到数组或SOAP序列化期间。但是代码看起来很无辜,嗯??:
[WebMethod]
public Deviation[] GetDeviationsByTimeInterval(DateTime from, DateTime to)
{
return DeviRoutines.GetDeviationsByTimeInterval(from, to).ToArray();
}
我不能100%确定错误不会发生在SQL或数据访问层中,但事实证明他们在测试过程中做得很好。在这个问题上任何帮助都会有很大帮助!:)
我会做一些类似的事情:
public Deviation[] GetDeviationsByTimeInterval(DateTime from, DateTime to)
{
var v1 = DeviRoutines.GetDeviationsByTimeInterval(from, to);
LogMe( "v1: " + v1.Count );
var v2 = v1.ToArray();
LogMe( "v2: " + v2.Length );
return v2;
}
证明你的期望通常会得到回报:-)
http://msdn.microsoft.com/en-us/library/x303t819.aspx
类型:T[]包含副本的数组清单中的元素。
您在.NET中没有发现错误,很可能是GetDeviationsByTimeInterval
中的错误
我敢打赌ToArray
完全按照它所说的去做,但你的from
或to
值偶尔是垃圾(验证错误?),或者GetDeviationsByTimeInterval
出于某种原因误解了它们。
将一些日志记录到Deviation[]
和GetDeviationsByTimeInterval
中,以查看传递给它的值,下次它变为梨形时,您将能够诊断问题所在。