Потому что C# — это строго типизированный язык… с дискретными штрихами снисходительности ;)

Если вы когда-либо работали с C#, вы знаете, что этот язык программирования — это то, что мы называем строго типизированным языком: ваши переменные, ваши константы и любое выражение, результатом которого является значение, должны иметь тип. Этот тип, в свою очередь, определяет, что может и чего не может делать переменная, где ее можно использовать, что должна показывать ваша IDE для автодополнения…

Чтобы удовлетворить наши повседневные потребности, язык предлагает довольно много встроенных типов (таких как int, float, string...), и вы можете очень легко импортировать некоторые основные библиотеки, такие как System.Collections.Generic, чтобы иметь List, Dictionary и т. д. .

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

Примечание. Другие языки, такие как Python, которые не навязывают типизацию и полагаются на утиную печать, иногда могут «обмануть» новичков своей простотой… прежде чем вы поймете, что случайно заменили параметр value (целое число) на другое (строковое) value вычисление в вашей функции!

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

Уловка №1: неявные типы

Вы когда-нибудь сталкивались с ключевым словом var? Этот небольшой инструмент — очень удобный способ неявного ввода локальной переменной; таким образом, вам не нужно указывать тип самостоятельно — это сам компилятор выведет его из контекста во время компиляции.

Конечно, этот метод требует, чтобы ваша переменная имела значение при ее объявлении (иначе компилятору не с чем будет работать!). Но очень здорово сократить свой код: вы можете использовать его для локальных переменных, в for или foreach циклах, а using файл или поток...

using System;

public class Program
{

    public static void Run()
    {
        var s = "Hello!";
        Console.WriteLine($"type(s) = {s.GetType()}");

        var i = 32;
        Console.WriteLine($"type(i) = {i.GetType()}");

        var f = -2.4f…