Elementor Header #8

18. Ошибки при работе с переменными

1. Введение

Переменные в C# играют ключевую роль в программировании. Однако при их использовании разработчики часто совершают ошибки, которые могут приводить к синтаксическим ошибкам, логическим багам и исключениям во время выполнения.


2. Основные ошибки при работе с переменными

2.1. Использование необъявленной переменной

В C# нельзя использовать переменную, не объявив её заранее.

Ошибка:

				
					x = 10; // Ошибка: переменная x не объявлена
Console.WriteLine(x);

				
			

Правильно:

				
					int x = 10;
Console.WriteLine(x);

				
			

2.2. Использование неинициализированной переменной

Локальные переменные в C# не инициализируются по умолчанию, их нужно задавать перед использованием.

Ошибка:

				
					int number;
Console.WriteLine(number); // Ошибка: переменная не инициализирована

				
			

Правильно:

				
					int number = 0; 
Console.WriteLine(number);

				
			

2.3. Попытка изменить const или readonly переменную

Переменные, объявленные как const или readonly, нельзя изменять после инициализации.

Ошибка:

				
					const double Pi = 3.14;
Pi = 3.14159; // Ошибка: нельзя изменить const

				
			

Правильно:

				
					const double Pi = 3.14; // Значение неизменно

				
			

Для readonly изменение возможно только в конструкторе.


2.4. Ошибки типов данных

Переменные в C# строго типизированы, поэтому нужно следить за совместимостью типов.

Ошибка:

				
					int number = "Hello"; // Ошибка: string нельзя присвоить int

				
			

Правильно:

				
					string message = "Hello";
int number = 10;

				
			

2.5. Переполнение числовых типов

Типы byte, int, short и long имеют ограниченный диапазон значений. Если число выходит за этот диапазон, возникает ошибка.

Ошибка:

				
					byte num = 256; // Ошибка: диапазон byte (0-255)

				
			

Правильно:

				
					int num = 256; // int подходит для больших значений

				
			

При необходимости можно использовать checked, чтобы выбрасывать исключение при переполнении:

				
					checked
{
    byte x = 255;
    x++; // Ошибка переполнения
}

				
			

2.6. Деление на ноль

В 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("Ошибка: деление на ноль!");

				
			

2.7. Ошибки при работе с 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

				
			

2.8. Ошибки округления при работе с 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

				
			

2.9. Конкатенация строк без 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();

				
			

3. Заключение

Переменные должны быть объявлены и инициализированы перед использованием.
Используйте const и readonly, если значение не должно изменяться.
Проверяйте деление на ноль и null, чтобы избежать ошибок.
Будьте осторожны с округлением чисел с плавающей точкой.
Используйте StringBuilder вместо + в циклах.

Избегая этих ошибок, ваш код станет стабильнее, эффективнее и понятнее! 🚀

3. Тестовое задание

Задание 1: Найдите ошибки

Какие ошибки есть в коде?

				
					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("Ошибка: деление на ноль!");

				
			

Попробуйте написать и запустить этот код, чтобы убедиться в правильности выполнения операций и особенностях работы с числами с плавающей точкой.

logo