我有这段代码:
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不会返回任何Item。
这里可能有什么问题?
答案 0 :(得分:4)
最有可能的字符串匹配找不到匹配项。更改代码以将日期与DateTime
的{{3}}部分进行比较,它将有更好的工作机会。
item => DateTime.Parse(item.ETA).Date == e.Day.Date
示例假设e.Day
为DateTime
。此外,您可能需要处理“item.ETA
无效日期/空”的情况(即使用DateTime.TryParse
)来匹配原始行为。
答案 1 :(得分:2)
有许多事情浮现在脑海中,但最有可能出现两件事:
Visibility.ETA
中的字符串是否修剪了前导和尾随空格?
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
。
答案 2 :(得分: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);
}