Критические изменения для перехода с версии 2.0 на 2.1Breaking changes for migration from version 2.0 to 2.1

Если вы выполняете миграцию с версии 2.0 на версию 2.1 .NET Core, учитывайте критические изменения, перечисленные в этой статье, так как они могут влиять на работу приложения.If you're migrating from version 2.0 to version 2.1 of .NET Core, the breaking changes listed in this article may affect your app.

CoreFXCoreFx

Частные поля, добавленные во встроенные типы структурPrivate fields added to built-in struct types

Частные поля добавлены во встроенные типы структур в ссылочных сборках.Private fields were added to built-in struct types in reference assemblies. В результате, в C#, типы структуры всегда должны создаваться с помощью нового оператора, литерала по умолчаниюили путем инициализации каждого частного поля.As a result, in C#, struct types must always be instantiated by using the new operator or default literal, or by initializing each of the private fields.

Описание измененийChange description

В .NET Core 2.0 и предыдущих версиях некоторые встроенные типы структур, например ConsoleKeyInfo, можно создать в C# без использования оператора new или литерала по умолчанию.In .NET Core 2.0 and previous versions, some built-in struct types, for example, ConsoleKeyInfo, could be instantiated without using the new operator or default literal in C#. Это вызвано тем, что ссылочные сборки, используемые компилятором C#, не содержат частных полей для структур.This was because the reference assemblies used by the C# compiler didn't contain the private fields for the structs. Все частные поля для типов структуры .NET добавляются в ссылочные сборки, начиная с .NET Core 2.1.All private fields for .NET struct types are added to the reference assemblies starting in .NET Core 2.1.

Например, следующий код C# компилируется в .NET Core 2.0, но не в .NET Core 2.1:For example, the following C# code compiles in .NET Core 2.0, but not in .NET Core 2.1:

ConsoleKeyInfo key;    // Struct type

if (key.ToString() == "y")
{
    Console.WriteLine("Yes!");
}

В .NET Core 2.1 предыдущий код приводит к следующей ошибке компилятора: CS0165 — использование локальной переменной "name", которой не присвоено значение "key"In .NET Core 2.1, the previous code results in the following compiler error: CS0165 - Use of unassigned local variable 'key'

Представленная версияVersion introduced

2.12.1

Создайте экземпляры типов структуры с помощью оператора new или литерала по умолчанию.Instantiate struct types by using the new operator or default literal.

Пример:For example:

ConsoleKeyInfo key = new ConsoleKeyInfo();    // Struct type.

if (key.ToString() == "y")
    Console.WriteLine("Yes!");
ConsoleKeyInfo key = default;    // Struct type.

if (key.ToString() == "y")
    Console.WriteLine("Yes!");
ConsoleKeyInfo[] keys = new ConsoleKeyInfo[5];    // Array of structs.

for (int i = 0; i < keys.Length; i++)
{
    // Initialize each array element with the new operator.
    keys[i] = new ConsoleKeyInfo();
}

КатегорияCategory

CoreFXCoreFx

Затронутые APIAffected APIs