Лямбда-выражение не работает для фильтрации объектов в списке - PullRequest
0 голосов
/ 14 июня 2019

Пользователь выбирает месяц, и динамически 4 текстовых поля + кнопка (сохранить строку) для каждого дня будут нарисованы; каждое текстовое поле имеет текстовое поле. Тег = день, который ссылается.

Когда пользователь нажимает на строку сохранения, я выбираю только текстовые поля соответствующей строки (ожидается 4 текстовых поля).

код, который генерирует текстовые поля:

foreach (DateTime day in monthDays)
{
    var t1 = new TextBox();
    t1.Location = new Point(Origin.X + 90, Origin.Y + 30 * Ycounter);
    t1.Size = new Size(40, 25);
    t1.MaxLength = 5;
    t1.Tag = day;
    AutoControls.Add(t1);
    Controls.Add(t1);

Я пытаюсь это:

private void SaveButton_Click(object sender, EventArgs e)
{
    Button b = (Button)sender;
    DateTime d = (DateTime)b.Tag;

    List<TextBox> t = new List<TextBox>(AutoControls.OfType < TextBox());

    //Autocontrols it's the list with ALL the dynamically generates controls in that form.


    var g = t.Where(x => x.Tag == b.Tag); // expecting 4 textboxes, but returns 0
    var g = t.Where(x => x.Tag == b.Tag).ToList(); // 0
    var g = t.FindAll(x => x.Tag == b.Tag); //returns  0 

Любая помощь очень ценится ^ _ ^

Ответы [ 2 ]

1 голос
/ 14 июня 2019

Вы сравниваете два object напрямую, и по умолчанию это будет сделано путем сравнения ссылок.

// this for example will never be true, even if today is 20190613
// because they are 2 different instances
(object)new DateTime(2019, 06, 13) == (object)DateTime.Today

Вместо этого вы хотите сравнить значение этих дат:

t.Where(x => x.Tag is DateTime date && date == d)
0 голосов
/ 14 июня 2019
List<Control> RecordData = Controls.Cast<Control>().Where(x => x.Tag is DateTime date && date == d).ToList();

Я создал этот код, начиная с предложений Xiaoy312 (спасибо ^^) и читая о команде Cast в похожих темах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...