Задать вопрос
@G-d1e

Как применить return внутри функции не используя его для выхода из функции С#?

У меня есть функция в которой применяется try - catch. В catch мне нужно использовать return; , иначе при обращении к переменной выдает ошибку:
Использование локальной переменной "stream", которой не присвоено значение

C return она пропадает, но возникает следующая ошибка:
Требуется объект с типом, приводимым к double

public double streamCurrency(string currency, string link)
        {
            var client = new System.Net.WebClient();
            System.IO.Stream stream;
            String str;
            try
            {
                stream = client.OpenRead(link);
            }
            catch (Exception situation)
            {
                str = String.Format("www.cbr.ru" + "\n{0}", situation.Message);
                materialLabel6.Text = str; return;
            }
            var reader = new System.IO.StreamReader(stream);
            str = reader.ReadToEnd();

            var i = str.IndexOf(currency);
            str = str.Substring(i, 40);
            i = str.IndexOf(">");
            str = str.Substring(i + 1);
            i = str.IndexOf(">");
            str = str.Substring(i + 1, 7);
            double course = Double.Parse(str);

            stream.Close();
            return course;
        }
  • Вопрос задан
  • 116 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
@d-stream
Готовые решения - не подаю, но...
Ну так и надо, исходя из заложенного смысла либо если что-то пошло не так - возвращать некое дефолтное/аварийное значение (например (double)0) либо эскалировать аварию дальше (throw)
Ответ написан
Комментировать
NikFaraday
@NikFaraday
Student full-stack Developer
Начните с изучения C# )

Во-первых, у вас вопрос имеет тег "функциональное программирование", что ни коем образом не относится в C#.
Во-вторых, return используется для возвращения некого значения ИЗ МЕТОДА, либо для выхода из тела МЕТОДА.
В-третьих, в C# нет функций.

На счёт вашего кода, внутри блока try/catch у вас вообще нет return. return у вас используется в конце тела МЕТОДА, т.к. метод обязан что-то возвращать, без return работать не будет))

И вот, собственно, ответ на ваш вопрос: вам нужно использовать конструктор для вашей переменной stream. Почитайте об этом хотя бы тут
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы