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.DayていDateTimeます。また、元の動作に一致させるために、「 item.ETAis not valid date/empty 」の場合 (つまり、 を使用して)を処理する必要がある場合があります。DateTime.TryParse

于 2012-11-28T17:40:12.377 に答える
2

思いつくことはたくさんありますが、最も可能性が高いのは次の 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 に答える