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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2017, 10:40   #1
KingMaster
 
Регистрация: 02.10.2009
Сообщений: 5
По умолчанию Как присвоить своё значение, если текущее присвоение вернуло исключение?

Код оброс конструкциями:

Код:
string a;
try
{
    a = SomeMethod();
}
catch
{
    a = "";
}
Есть ли какая-нибудь конструкция (решарпер подсказок не даёт), которая бы сократила код, на подобии конструкции, которая сокращает простые if/else?
Например:
Код:
string a = SomeMethod() != Exeption ? SomeMethod() : "";
Конечно, можно было бы в SomeMethod добавить try/catch и возвращать "", но тут он чисто для обозначения, у меня нет прав его править.

Последний раз редактировалось KingMaster; 08.02.2017 в 10:41. Причина: дополнение
KingMaster вне форума Ответить с цитированием
Старый 08.02.2017, 11:33   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Код:
string a = "своё значение";
a = SomeMethod(); // Если вывалится исключение, то значение a не перезапишется на другое
pu4koff вне форума Ответить с цитированием
Старый 08.02.2017, 11:36   #3
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Вряд ли, только если вынести это в отдельный метод.

Если очень надо, то можно сделать что-нибудь типа
Код:
T TryGetValue(Func<T> operation, T defaultValue)
{
    try
    {
        return operation();
    }
    catch
    {
        return defaultValue;
    }
}
и передавать лямбду и значение для catch.

В Kotlin можно так, может когда-нибудь и в C# придет что-то похожее
Код:
    val ret = try {
        someMethod()
    } catch (ex: Exception) {
        0
    }

    print(ret);
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 08.02.2017 в 11:39.
Alex11223 вне форума Ответить с цитированием
Старый 08.02.2017, 11:54   #4
KingMaster
 
Регистрация: 02.10.2009
Сообщений: 5
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Код:
string a = "своё значение";
a = SomeMethod(); // Если вывалится исключение, то значение a не перезапишется на другое
мне не нужно исключение

Alex11223, если бы задача была поставлена не с целью сократить количество кода, то возможно я бы такого тоже ждал в шарпе...)
А так это ещё хуже, чем есть сейчас и по объему и по читаемости)
Жалко...
KingMaster вне форума Ответить с цитированием
Старый 08.02.2017, 12:10   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Не, это лучше. Не надо 3 раза повторять имя переменной (+ val там это типа const/readonly) и можно не объявлять переменную с типом SuperLongEnterpriseClass если и так понятно из имени переменной или метода.
Ну и если сократить надо, то можно ж и в 1 строку
Код:
val ret = try { someMethod() } catch (ex: Exception) { 0 }
А так TryGetValue в примере выше даже короче будет
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 08.02.2017 в 12:16.
Alex11223 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переменной t присвоить значение истина, если в одномерном массиве имеется хотя бы одно отрицательное и четное число (Паскаль) zzz99 Помощь студентам 3 13.03.2014 13:28
Переменной t присвоить значение true, если дата d1, m1 предшествует (в рамках года) дате d2, m2, и значение false иначе Andrew5674 Паскаль, Turbo Pascal, PascalABC.NET 4 11.12.2013 21:37
Как присвоить значение DBLookupComboBox'у? Vit@L Общие вопросы Delphi 15 25.07.2012 19:21
Как в макросе указывать текущее значение ячейки. Nick_odessa Microsoft Office Excel 2 04.04.2012 16:37
как присвоить значение??? VintProg Общие вопросы C/C++ 1 05.08.2011 15:21