Почему не компилируются дробные константы с точкой в конце?

Внезапно обнаружил, что такой код не компилируется: https://ideone.com/KrX8T3

public class Test
{
  public static void Main()
  {
    double x = 1.;
  }
}

prog.cs(5,17): error CS1001: Unexpected symbol `;', expecting identifier

Получается, C# хочет полную запись дробного числа 1.0, а сокращённая 1. его не устраивает, хотя в других языках так можно. С чем связано столь странное решение? Причём, опускать лидирующий ноль разрешено и .1 компилируется отлично.


Ответы (1 шт):

Автор решения: Laukhin Andrey

Вот почему:

double x = 1;
string y = 1.ToString();

После 1. компилятор ожидает метод. В C# предопределенные типы не настолько примитивны, как в Си.

C# provides a set of predefined struct types called the simple types.

C# has a unified type system. All C# types, including primitive types such as int and double, inherit from a single root object type.

Just as these predefined types are structs, it is also possible to use structs and operator overloading to implement new “primitive” types in the C# language.

→ Ссылка