Главная страница » C# » 18. Ошибки при работе с переменными
Переменные в C# играют ключевую роль в программировании. Однако при их использовании разработчики часто совершают ошибки, которые могут приводить к синтаксическим ошибкам, логическим багам и исключениям во время выполнения.
В C# нельзя использовать переменную, не объявив её заранее.
❌ Ошибка:
x = 10; // Ошибка: переменная x не объявлена
Console.WriteLine(x);
int x = 10;
Console.WriteLine(x);
Локальные переменные в C# не инициализируются по умолчанию, их нужно задавать перед использованием.
❌ Ошибка:
int number;
Console.WriteLine(number); // Ошибка: переменная не инициализирована
✅ Правильно:
int number = 0;
Console.WriteLine(number);
const
или readonly
переменнуюПеременные, объявленные как const
или readonly
, нельзя изменять после инициализации.
❌ Ошибка:
const double Pi = 3.14;
Pi = 3.14159; // Ошибка: нельзя изменить const
✅ Правильно:
const double Pi = 3.14; // Значение неизменно
Для readonly
изменение возможно только в конструкторе.
Переменные в C# строго типизированы, поэтому нужно следить за совместимостью типов.
❌ Ошибка:
int number = "Hello"; // Ошибка: string нельзя присвоить int
✅ Правильно:
string message = "Hello";
int number = 10;
Типы byte
, int
, short
и long
имеют ограниченный диапазон значений. Если число выходит за этот диапазон, возникает ошибка.
❌ Ошибка:
byte num = 256; // Ошибка: диапазон byte (0-255)
✅ Правильно:
int num = 256; // int подходит для больших значений
При необходимости можно использовать checked
, чтобы выбрасывать исключение при переполнении:
checked
{
byte x = 255;
x++; // Ошибка переполнения
}
В C# целочисленное деление на ноль вызывает исключение, а деление double
на 0 возвращает Infinity
.
❌ Ошибка:
int result = 10 / 0; // Ошибка: деление на 0
✅ Правильно:
double result = 10.0 / 0; // Вернёт Infinity
Лучше проверять перед делением:
int a = 10, b = 0;
if (b != 0)
Console.WriteLine(a / b);
else
Console.WriteLine("Ошибка: деление на ноль!");
null
Ссылочные типы могут содержать null
, а обращение к null
приводит к NullReferenceException
.
❌ Ошибка:
string text = null;
Console.WriteLine(text.Length); // Ошибка: NullReferenceException
✅ Правильно:
string? text = null;
if (text != null)
Console.WriteLine(text.Length);
Или использование ?.
(Null-условный оператор):
Console.WriteLine(text?.Length); // Без ошибки, вернет null
float
и double
Типы float
и double
имеют погрешность при вычислениях.
❌ Ошибка:
double a = 0.1 + 0.2;
Console.WriteLine(a == 0.3); // Выведет False!
✅ Правильно:
double a = 0.1 + 0.2;
Console.WriteLine(Math.Abs(a - 0.3) < 0.0001); // True
Для точных вычислений используйте decimal
:
decimal x = 0.1m + 0.2m;
Console.WriteLine(x == 0.3m); // True
StringBuilder
Конкатенация (+
) строк в цикле неэффективна.
❌ Ошибка:
string result = "";
for (int i = 0; i < 1000; i++)
{
result += "Hello"; // Неэффективно: создаётся новая строка
}
✅ Правильно:
using System.Text;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000; i++)
{
sb.Append("Hello");
}
string result = sb.ToString();
✔ Переменные должны быть объявлены и инициализированы перед использованием.
✔ Используйте const
и readonly
, если значение не должно изменяться.
✔ Проверяйте деление на ноль и null
, чтобы избежать ошибок.
✔ Будьте осторожны с округлением чисел с плавающей точкой.
✔ Используйте StringBuilder
вместо +
в циклах.
Избегая этих ошибок, ваш код станет стабильнее, эффективнее и понятнее! 🚀
Какие ошибки есть в коде?
int x;
Console.WriteLine(x);
const double Pi = 3.14;
Pi = 3.14159;
string name = null;
Console.WriteLine(name.Length);
✅ Исправленный вариант:
int x = 0;
Console.WriteLine(x);
const double Pi = 3.14; // Нельзя менять const
string? name = null;
Console.WriteLine(name?.Length);
Задание 2: Исправьте код
int a = 10, b = 0;
int result = a / b;
Console.WriteLine(result);
✅ Исправленный вариант:
int a = 10, b = 0;
if (b != 0)
Console.WriteLine(a / b);
else
Console.WriteLine("Ошибка: деление на ноль!");
Попробуйте написать и запустить этот код, чтобы убедиться в правильности выполнения операций и особенностях работы с числами с плавающей точкой.
Телефон: +375 33 910-08-92
Email: info@codefor.tech
Адрес: г. Барановичи, ул. Пирогова, д. 7
© 2024-2025 Все права защищены. CodeFor.