Метод First массива PropertyInfo[] работает через раз - C#
Формулировка задачи:
Вот такой код:
почему то работает через раз.
В общем, у меня есть некоторый дизайнера форм, который генерит на лету форму для редактирования объекта, затем я заполняю поля объекта из полей формы.
список свойств получаю вот так:
Почему то иногда проскакивают такие ситуации, что свойство при измени размеров на форме не обновляется. Стал искать отладчиком, заметил, что в тот момент не входит в ветку
if (pr != null)
{
pr.SetValue(a_obj, convert_to(get_value(control, c_type), pr), null);
}
Подскажите пожалуйста, как метод First у массива заставить работать стабильно, что бы он возвращал не null а нормальное значение.
Добавил:
показывает, что первый элемент есть даже в те моменты, когда глючит метод First
Тогда заработала. и, что характерно, когда было вот так:
Почему то тоже работало через раз. Смотрел в отладчике - две одинаковы строки, а компьютер считает их не равными? Почему????? Что за чудеса?!
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);
После
//свойства PropertyInfo[] props = tp.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
MessageBox.Show(props[0].ToString());
Переделал вот так:
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)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д