Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2020, 10:52   #1
melky
Пользователь
 
Регистрация: 27.05.2018
Сообщений: 46
По умолчанию Переменную в False при любой ошибке

При помощи десериализации читается xml файл. Все переменные в нем строковые, соответственно что-то может быть null или ""

Далее используется проверка в зависимости от типов переменных

Код:
                    bool t = false;
                    
                    t = DateTime.TryParse(saveParam.per1, out per1);
                    t = DateTime.TryParse(saveParam.per2, out per2);
                    t = int.TryParse(saveParam.per3, out per3);
                    t = int.TryParse(saveParam.per4, out per4);
Нужно переменную Х (булевая) сделать false при любом false при проверке.
Цикл организовать с выходом не могу, так как переменные разные, типы данных могут быть разные, количество может быть разным... Идей в голову не приходит...
melky вне форума Ответить с цитированием
Старый 29.05.2020, 12:40   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

можно достать все свойства через рефлексию.
И сделать перебор циклом. Для нужных стандартных типов прописать конвертацию.
Возможно получится объемно.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 29.05.2020, 16:24   #3
melky
Пользователь
 
Регистрация: 27.05.2018
Сообщений: 46
По умолчанию

Нужен какой-то универсальный способ, так как от кода к коду будет меняться список переменных их тип, количество, как это в рефлексию загонять ? вы про чтение самой xml ? меня вполне устраивает сериализация. Задал класс с нужным набором и забыл.

А потом каждый раз переписывать проверки не хочется.
Например если сделать переменную в классе релиализации не string а int, то при ее отсутствии мы получим 0, но 0 может быть и актуальным значением а не отсутствием записи.

а так сейчас получается в середина false прилетело а в конце true и в итоге оно все как бы true, а надо чтобы было false
melky вне форума Ответить с цитированием
Старый 30.05.2020, 17:29   #4
u1035
Новичок
Джуниор
 
Регистрация: 30.05.2020
Сообщений: 2
По умолчанию

А что если сделать как-то так:
Код:
bool t1 = DateTime.TryParse(saveParam.per1, out per1);
bool t2 = DateTime.TryParse(saveParam.per2, out per2);
bool t3 = int.TryParse(saveParam.per3, out per3);
bool t4 = int.TryParse(saveParam.per4, out per4);

bool success = (t1 && t2 && t3 && t4);
Если кто-то не успешен - то success == false.
Но при добавлении/удалении свойств придётся эту штуку править.

Во, ещё дичь придумал))

Код:
var results = new List<bool>();
results.Add(DateTime.TryParse(saveParam.per1, out per1));
results.Add(DateTime.TryParse(saveParam.per2, out per2));
results.Add(int.TryParse(saveParam.per3, out per3));
results.Add(int.TryParse(saveParam.per4, out per4));

return results.All(x => x == true);
Но вообще да, чтобы сделать и забыть - нужна рефлексия. Иначе добавится новое свойство - и надо будет править этот код.
Hot Keys - мой блог о программировании и не только

Последний раз редактировалось u1035; 30.05.2020 в 17:32.
u1035 вне форума Ответить с цитированием
Старый 30.05.2020, 22:27   #5
melky
Пользователь
 
Регистрация: 27.05.2018
Сообщений: 46
По умолчанию

u1035 да, тоже подумал на счет первого варианта, на счет проверки через && спасибо, проверю. А то обдумывал как проверять.

Да не думаю, что изменение всех переменных и добавление новых плюс правка потом одной строки такой ужас. Это в принципе один раз будет писаться под задачу. Так что за идею спасибо.
melky вне форума Ответить с цитированием
Старый 01.06.2020, 08:15   #6
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

А зачем эти извращения??
У вас самописный десериализатор чтоли?? Стандартный класс вроде сразу ошибку выкидывает если не удалось все элементы распознать.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 01.06.2020, 08:33   #7
melky
Пользователь
 
Регистрация: 27.05.2018
Сообщений: 46
По умолчанию

WorldMaster еще раз, сериализатор, если нет параметра возвращает null, если это строка и не будет никаких ошибок.
Если параметр int и нет параметра, то вернет 0.

Это просто проверка на наличие параметра и правильности ее записи. Тот же DateTime.ToString()
Например если параметра нет, либо игнорируем, либо выставляем значение по умолчанию.
melky вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Описать процедуру Minmax(X, Y), записывает в переменную X минимальное из значений X и Y, а в переменную Y - максимальное kinash96 Помощь студентам 3 12.10.2013 19:49
решить задачу, используя любой алгоритм и любой язык программирования oncheva Помощь студентам 0 24.12.2012 18:07
Интересная задача, реализация временных логик (любой логики), язык любой. Flyym Помощь студентам 1 05.01.2011 03:10
конвертировать номер из любой базы в любой другую базу stefan0202 Фриланс 6 02.03.2010 21:47