Метод 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)