Подскажите логику выполнения кода - C#

278
12 июля 2017, 22:36

Господа, доброго времени суток. Я закомментировал каждую строку, чтобы показать как я ее понимаю, исправте пожалуйста если я в чем то ошибся. Прикрепляю скрин задания на всякий случай.

class Calculator { // создание класса
public double CalcFraction1 (double x, double y)  { // создание метода 
    var numerator = Math.Abs(x) - Math.Abs(y); // вычисляем числитель
    var denominator = (1 + Math.Abs(x) * Math.Abs(y)); // вычисляем знаменатель
    if (denominator == 0)   { // если знаменатель 0, то обрабатываем исключение
        throw new DivideByZeroException();
    }
    return numerator / denominator; // возвращаем результат деления
}
public static double ReadNumber ()  { 
    double value; // тип переменной 
    while (!double.TryParse(Console.ReadLine(), out value)) { }  // ВОТ ТУТ ВООБЩЕ НЕ ПОНЯЛ
    return value; // возвращаем значение переменной
}
void Main () { 
    var calculator = new Calculator(); // создаем экземпляр класса Calculator
    Console.WriteLine("Please, enter two numbers"); // введите два числа
    var x = ReadNumber(); 
    var y = ReadNumber();
    try  {
        Console.WriteLine($"W = {calculator.CalcFraction1(x, y)}"); // ВОТ ТУТ ВООБЩЕ НЕ ПОНЯЛ
    }
    catch (DivideByZeroException) {
        Console.WriteLine("Denominator is zero"); // Если возникло исключение, то выводим на экран
    }
}

}

Answer 1
while (!double.TryParse(Console.ReadLine(), out value)) { }  // ВОТ ТУТ ВООБЩЕ НЕ ПОНЯЛ

тоже что и

while (double.TryParse(Console.ReadLine(), out value) == false) { }

пока не считает значение из консоли типа double.

Метод Double.TryParse Преобразует строковое представление числа в эквивалентное ему число двойной точности с плавающей запятой. Возвращает значение, указывающее, успешно ли выполнено преобразование. https://msdn.microsoft.com/ru-ru/library/system.double.tryparse(v=vs.110).aspx

Также присваивает полученное значение out value

public static bool TryParse(
    string s,
    out double result
)
s
    Type: System.String

Строка, содержащая преобразуемое число.

result
    Type: System.Double

При возврате этот метод содержит число двойной точности с плавающей запятой, эквивалентное параметру s, если преобразование завершилось успешно, или нуль, если оно завершилось неудачно. Преобразование завершается неудачно, если значение параметра s равно null или String.Empty, не является числом допустимого формата или представляет число меньше MinValue или больше MaxValue. Этот параметр передается неинициализированным; любое значение, первоначально предоставленное в объекте result, будет перезаписано.

https://msdn.microsoft.com/ru-ru/library/994c0zb1(v=vs.110).aspx

Console.WriteLine($"W = {calculator.CalcFraction1(x, y)}");

выполняет функцию calculator.CalcFraction1(x, y) и выводит в консоль (return numerator / denominator;)

Интерполяция строк

https://metanit.com/sharp/tutorial/7.5.php

Начиная с версии языка C# 6.0 (Visual Studio 2015) была добавлена такая функциональность, как интерполяция строк. Эта функциональность призвана заменить форматирование строк. Так, перепишем пример с выводом значений свойств объекта Person:

Person person = new Person { Name = "Tom", Age = 23 };
Console.WriteLine($"Имя: {person.Name}  Возраст: {person.Age}");

Знак доллара перед строкой указывает, что будет осуществляться интерполяция строк. Внутри строки опять же используются плейсхолдеры {...}, только внутри фигурных скобок уже можно напрямую писать те выражения, которые мы хотим вывести.

Интерполяция по сути представляет более лаконичное форматирование. При этом внутри фигурных скобок мы можем указывать не только свойства, но и различные выражения языка C#:

int x = 8;
int y = 7;
string result = $"{x} + {y} = {x + y}";
Console.WriteLine(result); // 8 + 7 = 15

Уже внутри строки можно применять форматирование. В этом случае мы можем применять все те же описатели, что и в методе Format. Например, выведем номер телефона в формате +x xxx-xxx-xx-xx:

long number = 19876543210;
Console.WriteLine($"{number:+# ### ### ## ##}"); // +1 987 654 32 10

Добавляем пространство до и после форматируемого вывода:

Console.WriteLine($"Имя: {person.Name, -5} Возраст: {person.Age}"); // пробелы после
Console.WriteLine($"Имя: {person.Name, 5} Возраст: {person.Age}"); // пробелы до
Вывод:
Имя: Том      Возраст: 23
Имя:      Том Возраст: 23

Добавлено

Вот пример работы (у меня работает)

READ ALSO
Как в ASP.NET MVC сделать всплывающую форму?

Как в ASP.NET MVC сделать всплывающую форму?

Например, пользователь нажимает на кнопку и вместо перехода на новую страницу, появляется всплывающее окно с этой формой

491
Десериализация многомерного json

Десериализация многомерного json

Есть json, для которого я сгенерировал класс

222
Оптимизация кода по поиску файлов c#

Оптимизация кода по поиску файлов c#

Добрый день, у меня стоит такая задача : найти все png файлы в диске и переименовать их, как я сделал :

277