Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSBasicCourse2ndedPodbelsky / CSBasicCourse2ndedPodbelsky.rtf
Скачиваний:
27
Добавлен:
22.03.2016
Размер:
11.9 Mб
Скачать

If (string.Compare(res, hen, true,

new System.Globalization.CultureInfo("ru")) > 0)

res = hen;

Console.WriteLine(res);

Результат, выводимый на консоль:

Глухарь

Обратите внимание, что четвёртый параметр метода Compare() заменён в

вызове безымянным объектом класса CultureInfo, сформированным конструктором

класса в выражении с операцией new. Аргумент конструктора – литерная строка

"ru" – обозначение нужного алфавита (в данном примере – русского языка). Если

возвращаемый результат, больше нуля, то есть первая строка, именуемая ссылкой

res, лексикографически больше второй, то вторая строка, связанная со ссылкой hen,

принимается в качестве претендента на наименьшее значение.

8.9. Преобразования с участием строкового типа

Рассматривая

арифметические

типы,

мы

привели

правила

неявны

х

преобразований и операцию явного приведения типов:

(тип) первичное_выражение

К строковому типу неявные преобразования не применимы, и невозможно

использование операции явного приведения типов.

Как уже отмечалось, для всех типов существует метод ToString()

"метод:

ToString()" , унаследованный всеми классами от единого базового класса object.

Таким образом, значение любого типа можно представить в виде строки, например,

так:

int n = 8, m = 3;

Console.WriteLine(m.ToString()+n.ToString() + " попугаев");

Результат вывода на консоль:

38 Попугаев.

Для обратного преобразования из строки в значение другого типа можно

воспользоваться

статическими

методами

библиотечного

класса

Convert,

принадлежащего пространству имён System. Ещё один путь – применение

статического метода Parse() "метод: Parse()" или метода TryParse(). Указанные

методы (их применение кратко рассмотрено в главе 5) определены в каждом классе

предопределённого типа, за исключением класса object (в котором они не нужны).

Эти методы часто применяется при чтении данных из входного консольного потока.

Метод Console.ReadLine() возвращает в виде строки набранную на клавиатуре

последовательность символов. "Расшифровку" этой последовательности, то есть

превращение символьного представления во внутреннее представление (в код)

соответствующего значения, удобно выполнить с помощью метода Parse() или

TryParse(). Наиболее просто, но совсем небезопасно, применить метод Parse(),

например таким образом:

int res = int.Parse(Console.ReadLine());

В данном случае изображение целого числа в виде набранной на клавиатур

е

последовательности цифр (возможно со знаком) передаётся в виде строки как

аргумент методу Parse() класса int (иначе System.Int32). Задача метода –

сформировать код целого числа, которое станет значением переменной int res.

Особенность (и опасность) – в прочитанной строке не должно быть символов,

отличных от десятичных цифр и знака числа (+ или -). Перед изображением числа

и

после

него

могут

находиться

пробелы,

которые

будут

отброшены

(проигнорированы). Например, строка может быть такой:

"

- 240

"

Значением переменной res будет -240.

Как уже говорилось, при неверной строковой записи значения анализируемого

типа, метод Parse() генерирует исключение. При отсутствии в программе

операторов обработки этих исключений (а мы их ещё не рассматривали) программа

завершается аварийно.

Для решения той же задачи чтения из входной строки целочисленного

значения метод TryParse() можно применить так:

int res;

do Console.Write("Введите целое число: ");

while(int.TryParse(Console.ReadLine(),out res)==false);

В цикле с постусловием пользователю выводится приглашение "Введите целое

число: ". Набранную на клавиатуре последовательность символов считывает метод

Console.ReadLine(). Возвращаемая методом строка служит первым аргументом

метода TryParse() из класса int. Если строка является корректным изображением

целого числа, то его код присваивается аргументу res, а метод TryParse() возвращает

значение true. Тем самым цикл завершается. В противном случае параметр res

остаётся без изменений, метод TryParse() возвращает значение false, что приводит к

следующей итерации цикла. Цикл будет повторяться, пока пользователь не введёт

правильного изображения целого числа.

Методов преобразований для предопределённых типов в классе System.Conver

t

много и у них разные имена. Например, для преобразования строки в код

"преобразование строк в код" целого числа типа int предназначен метод:

Convert.ToInt32(строка);

При использовании преобразований в строке-аргументе должны быть только

символы, допустимые для представления того значения, к типу которого

выполняется преобразование. В противном случае возникает ошибочная ситуация,

генерируется исключение, и, если в программе не предусмотрена обработка этого

исключения, программа завершается аварийно. Приведём пример с одним из

методов класса Convert:

string sPi = "3,14159", radius = "10,0";

double circle = 2 * Convert.ToDouble(sPi) * Convert.ToDouble(radius);

Console.WriteLine("Длина окружности="+circle.ToString());

В примере определены две строки, содержащие изображения вещественных

чисел (типа double). Обратите внимание, что дробная часть строкового

представления каждого числа отделена от целой части запятой, а не точкой. Это

связано (как мы уже упоминали) с правилами локализации системы, в которой

исполняется программа. В Европе и России целая и дробная части числа

традиционно разделяются запятой. В инициализаторе переменной double circle

использованы два обращения к одному методу класса Convert. Возвращаемые этими

методами значения использованы для вычисления инициализирующего выражения.

Как догадался проницательный читатель, будет получено приближенное значение

длины окружности с радиусом 10. В аргументе метода Console.WriteLine( ) явно

выполнено (хотя это и не обязательно) преобразование значения circle к значению

типа string. На консоль будет выведено:

Длина окружности=62,8318

(Опять запятая в изображении числа!)

Соседние файлы в папке CSBasicCourse2ndedPodbelsky