Типы, переменные и строки в C#

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

На примере разберем int, double, bool, string, var и string interpolation

Что получится в конце

Программа выведет:

Товар: Книга по C#
Количество: 2
Итог: 1700
Скидка применена: True

Код:

var productName = "Книга по C#";
int quantity = 2;
double price = 1000;
double discountPercent = 15;

double subtotal = price * quantity;
double discount = subtotal * discountPercent / 100;
double total = subtotal - discount;
bool hasDiscount = discountPercent > 0;

Console.WriteLine($"Товар: {productName}");
Console.WriteLine($"Количество: {quantity}");
Console.WriteLine($"Итог: {total}");
Console.WriteLine($"Скидка применена: {hasDiscount}");

Создаем проект

dotnet new console -n CSharpTypes
cd CSharpTypes

Откройте Program.cs, замените содержимое кодом из примера и запустите:

dotnet run

Если проект запускается, можно разбирать типы по одному

int, double, bool, string

int хранит целые числа:

int quantity = 2;

double хранит число с дробной частью:

double price = 1000;
double discountPercent = 15;

bool хранит true или false:

bool hasDiscount = discountPercent > 0;

string хранит текст:

string productName = "Книга по C#";

Для первого урока этого набора достаточно. Позже появятся decimal, DateTime, nullable-типы, коллекции и собственные классы

var не делает C# динамическим

Строка:

var productName = "Книга по C#";

не превращает переменную в «что угодно». Компилятор смотрит на значение справа и выводит тип string

То есть такой код не сработает:

var productName = "Книга по C#";
productName = 123;

Переменная уже строка, и число в нее положить нельзя. var экономит запись, но не отменяет строгую типизацию

Когда тип важен для чтения урока, пишите явно. Когда значение очевидно, var нормален

String interpolation

Вместо склеивания строк:

Console.WriteLine("Товар: " + productName);

удобнее писать:

Console.WriteLine($"Товар: {productName}");

Символ $ перед строкой включает интерполяцию. Внутри {...} можно вставлять переменные и выражения:

Console.WriteLine($"Цена за штуку: {price}, всего позиций: {quantity}");

Для учебных и прикладных сообщений это читается сильно лучше, чем длинная цепочка +

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

Сейчас total может выводиться слишком просто. Добавим формат:

Console.WriteLine($"Итог: {total:0.00}");

Теперь число будет показано с двумя знаками после точки:

Итог: 1700.00

Для настоящих денег в C# часто используют decimal, но в первом уроке double помогает спокойно разобрать типы и арифметику. Если пишете финансовый код, не переносите учебный double бездумно в production

Ввод из консоли

Добавим имя товара от пользователя:

Console.Write("Введите товар: ");
string? productName = Console.ReadLine();

Console.WriteLine($"Вы выбрали: {productName}");

Почему string?, а не просто string? Console.ReadLine() может вернуть null, если ввод недоступен. Современный C# умеет предупреждать о возможном null, и это не случайная придирка: так язык помогает не получить NullReferenceException позже

Для простого урока можно обработать пустой ввод так:

if (string.IsNullOrWhiteSpace(productName))
{
    productName = "Без названия";
}

Частые ошибки

Cannot implicitly convert type 'string' to 'int'. Вы пытаетесь положить строку в числовую переменную. Нужно преобразование или другой тип

Use of unassigned local variable. Переменная объявлена, но не получила значение перед использованием

Неправильная десятичная запятая. В коде дробные числа пишутся с точкой: 10.5, а не 10,5

Nullability warnings после Console.ReadLine. Это предупреждение о возможном null. Проверьте значение перед использованием

Что может быть еще интересно по этой теме

Что лучше: var или явный тип? Для новичка явный тип часто полезнее. В реальном коде var используют там, где тип очевиден из правой части

Почему bool выводится как True, а не true? Это стандартное строковое представление bool в .NET. Для JSON и API правила будут другими

Нужно ли сразу учить все типы C#? Нет. Сначала хватит int, double, bool, string, затем добавятся decimal, DateTime, коллекции и классы

Почему C# ругается до запуска? Потому что компилятор проверяет типы заранее. Это один из главных плюсов языка

Что открыть дальше

Оцените статью
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x