列表<>;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或数据访问层中,但事实证明他们在测试过程中做得很好。在这个问题上任何帮助都会有很大帮助!:)

列表<>;ToArray()过程中丢失的项

我会做一些类似的事情:

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完全按照它所说的去做,但你的fromto值偶尔是垃圾(验证错误?),或者GetDeviationsByTimeInterval出于某种原因误解了它们。

将一些日志记录到Deviation[]GetDeviationsByTimeInterval中,以查看传递给它的值,下次它变为梨形时,您将能够诊断问题所在。