0

我有这个代码:

List<Visibility> ListVisibility = new List<Visibility>();
    public class Visibility
    {
        public int ShpNo;
        public int QtyShp;
        public int NumPallets;
        public string ETA;            
    }

Visibility item = ListVisibility.Find(VisibItem => VisibItem.ETA == e.Day.Date.ToShortDateString());

但是,当有一个符合该条件的项目时,上面的 Find 不会返回任何项目。

这里有什么问题?

4

3 回答 3

4

最有可能的字符串匹配找不到匹配项。更改代码以将日期作为Date一部分进行比较DateTime,它将有更好的工作机会。

item => DateTime.Parse(item.ETA).Date == e.Day.Date

样本假设e.DayDateTime. 此外,您可能需要处理“item.ETA日期无效/空”的情况(即使用DateTime.TryParse)以匹配原始行为。

于 2012-11-28T17:40:12.377 回答
2

我想到了许多事情,但最有可能的是两件事:

  1. 字符串是否Visibility.ETA修剪了前导和尾随空格?

  2. 字符串的大小写是否Visibility.ETA匹配DateTime.ToShortDateString()

如果您将条件更改为:

var date = e.Day.Date.ToShortDateString();
var vis = list.Find(
    v => String.Compare(v.ETA, date, StringComparison.OrdinalIgnoreCase) == 0);

它是否找到您要查找的项目?如果不是,您应该考虑是否需要将 ETA 转换为DateTime.

于 2012-11-28T17:41:49.063 回答
1

奥卡姆剃刀:你假设有一个项目符合你的条件是不正确的。

您可以通过一个简单的测试(这使用 NUnit)来验证该方法是否有效。

[Test]
public void TestFind()
{
     var etaValue = DateTime.Now.Date.ToShortDateString();
     var visibilities = new List<Visibility> { new Visibility { ETA = etaValue } };
     var foundItem = visibilities.Find(x => x.ETA == etaValue);
     Assert.That(foundItem, Is.Not.Null);
}
于 2012-11-28T17:51:36.973 回答