Метод First массива PropertyInfo[] работает через раз - C#

Узнай цену своей работы

Формулировка задачи:

Вот такой код:
                        try
                        {
                            PropertyInfo pr = props.First(
                                delegate(PropertyInfo item)
                                {
                                    return item.Name == control.Tag;
                                });
                            if (pr != null)
                            {
                                pr.SetValue(a_obj, convert_to(get_value(control, c_type), pr), null);
                            }
                        }
                        catch (Exception ex) { }
почему то работает через раз. В общем, у меня есть некоторый дизайнера форм, который генерит на лету форму для редактирования объекта, затем я заполняю поля объекта из полей формы. список свойств получаю вот так:
            Type tp = a_obj.GetType();
 
            //поля
            FieldInfo[] fls = tp.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
 
            //свойства
            PropertyInfo[] props = tp.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
Почему то иногда проскакивают такие ситуации, что свойство при измени размеров на форме не обновляется. Стал искать отладчиком, заметил, что в тот момент не входит в ветку if (pr != null) { pr.SetValue(a_obj, convert_to(get_value(control, c_type), pr), null); } Подскажите пожалуйста, как метод First у массива заставить работать стабильно, что бы он возвращал не null а нормальное значение.
После
            //свойства
            PropertyInfo[] props = tp.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
Добавил:
            MessageBox.Show(props[0].ToString());
показывает, что первый элемент есть даже в те моменты, когда глючит метод First
Переделал вот так:
                        FieldInfo fl = null;
                        foreach (FieldInfo item in fls)
                        {
                            if (item.Name.ToString() == control.Tag.ToString())
                            {
                                fl = item;
                                break;
                            }
                        }
                        if (fl != null)
                        {
                            fl.SetValue(a_obj, convert_to(get_value(control, c_type), fl));
                        }
                        PropertyInfo pr = null;
                        foreach (PropertyInfo item in props)
                        {
                            if (item.Name.ToString() == control.Tag.ToString())
                            {
                                pr = item;
                                break;
                            }
                        }
                        if (pr != null)
                        {
                            pr.SetValue(a_obj, convert_to(get_value(control, c_type), pr), null);
                        }
Тогда заработала. и, что характерно, когда было вот так:
if (item.Name == control.Tag)
Почему то тоже работало через раз. Смотрел в отладчике - две одинаковы строки, а компьютер считает их не равными? Почему????? Что за чудеса?!

Решение задачи: «Метод First массива PropertyInfo[] работает через раз»

textual
Листинг программы
if (item.Name == (string) control.Tag)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.4 из 5
Похожие ответы