Описание тега c#-9.0

По вопросам, связанным с разработкой новой версии 9.0 языка C#.
4 ответа

Как включить предварительный просмотр C# 9.0

Я скачал и установил v5.0.0-preview.5. Мой проект нацеленnet5.0 но C# 9.0не работает. Как я могу включитьC# 9.0?
16 июн '20 в 02:23
1 ответ

C# 9.0 С-выражениями. Как их использовать?

Новый синтаксис C# 9.0 позволяет использовать новый вид выражения: var newPerson = oldPerson with { Age = "21" }; При просмотре предыдущей строки кода возникают следующие вопросы: Это ссылка или новая копия объекта? Если это ссылка, то как насчет на…
18 июн '20 в 11:50
1 ответ

Включение C#9 в .net5 Preview5 вызывает ошибку компилятора для новой функции C#9

Я последовал этому ответу: Как включить предварительный просмотр C# 9.0, чтобы включить C#9. Я установил.net5 preview5, который включает новый C#9. Microsoft.NETCore.App 5.0.0-preview.5.20278.1 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App] …
22 июн '20 в 21:44
0 ответов

Записи C# 9: как указать универсальный тип T, который должен быть записью

Я экспериментирую с C# 9 RC, конвертируя существующее приложение для использования нового record построить и связать with ключевое слово. Большая часть определенных мной типов записей реализуют этот интерфейс (измененный для использования init ключе…
03 сен '20 в 13:55
2 ответа

Использование записей С # 9.0 для создания структуры данных, подобной умному перечислению / дискриминированному объединению / типу суммы?

Играя с recordтипа на C#, похоже, было бы весьма полезно создавать структуры данных, подобные размеченному объединению, и мне просто интересно, не упускаю ли я некоторых ошибок, о которых я позже пожалею. Например: abstract record CardType{ // Case …
03 сен '20 в 16:06
1 ответ

с выражением vs новое ключевое слово

Я читал блоги разработчиков о том, "что нового в C#9.0", а потом заметил "с выражением". public data class Person { public string FirstName { get; init; } public string LastName { get; init; } } var otherPerson = person with { LastName = "Hanselman"…
17 июн '20 в 00:48
2 ответа

понимание Возможный возврат нулевой ссылки

Я начал получать эти предупреждения с предварительным просмотром VS19 и <TargetFramework>net5.0</TargetFramework> <LangVersion>preview</LangVersion>` <Nullable>enable</Nullable> Вот пример из класса, который прокс…
29 июл '20 в 05:17
1 ответ

Записи C# 9.0 - ссылочные типы и конструктор, не допускающие значения NULL

Я пробовал простую запись: #nullable enable public record Product { public readonly string Name; public readonly int CategoryId; public readonly string Phone; public readonly Address Address; public readonly Manager Manager; } Я получаю предупрежден…
15 авг '20 в 11:34
4 ответа

В чем разница между Init-Only и ReadOnly в C# 9?

Я просматриваю новые функции C# 9, которые скоро будут выпущены. Вместе с ним вводятся свойства только для инициализации. Одно большое ограничение сегодня заключается в том, что свойства должны быть изменяемыми, чтобы инициализаторы объектов работал…
14 июн '20 в 15:19
4 ответа

Тестирование C# 9.0 в VS2019 - CS0518 IsExternalInit не определен и не импортирован ... Как его определить / импортировать?

C# 9.0 все еще находится в стадии разработки. Есть пара ссылок, которые наводят меня на мысль, что теперь это должно быть проверено (по крайней мере, некоторые из них). Блог Microsoft, написанный самим мистером Awesome, в котором представлены функци…
30 июн '20 в 02:35
1 ответ

C# 9.0 Поддержка программ верхнего уровня в Visual Studio 2019

С выходом C# 9.0 и.NET 5 появилась новая функция, называемая "Программы верхнего уровня". Эта функциональность избавляет от большого количества шаблонного кода, необходимого для создания простого приложения C#, поскольку вам не нужно оборачивать ваш…
18 июл '20 в 17:31
1 ответ

записи в C# 9.0 и допускающие значения NULL

Я пробую новые функции записи, используя последнюю версию.Net5 public record Rec { public string Name; public int Id; //public Rec(string name, int id) => (Name, Id) = (name, id); } я получил предупреждение CS8618: поле "Имя", не допускающее знач…
27 июл '20 в 08:11
6 ответов

записи C# 9.0 - отражение и общие ограничения

Два вопроса о новых записях: Как распознать запись с помощью отражения? глядя сюда, может быть, есть способ обнаружитьEqualityContract но я не уверен, что это путь? Возможно ли иметь общее ограничение, что универсальный тип является записью? то есть…
26 июл '20 в 10:23
1 ответ

C# Nullability не выводится правильно

Рассматривать: #nullable enable class Manager { public int Age; } class Archive { readonly Dictionary<string, Manager> Dict = new Dictionary<string, Manager>(); public (bool ok, Manager? value) this[string key] { get { return Dict.TryGet…
11 сен '20 в 13:37
1 ответ

Проблемы с типами, допускающими значение NULL, в C# 9

Рассмотрим следующий код (VS 16.8.0 Preview 2.1 C# 9.0 preview): #nullable enable using System.Collections.Generic; class Archive<T> where T : notnull { readonly Dictionary<string, T> Dict = new(); public T? GetAt(string key) { return Di…
12 сен '20 в 09:48
1 ответ

C# 9.0 записывает ToString()

Если я посмотрю в спецификации, там написано Запись включает синтезированный метод, эквивалентный методу, объявленному следующим образом: публичная переопределенная строка ToString(); однако с использованием sharplab и, как я вижу в моем коде VS16.8…
16 сен '20 в 10:09
3 ответа

Как копировать / клонировать записи в C# 9?

Спецификация функции записей C# 9 включает следующее: Тип записи содержит два копирующих члена: Конструктор, принимающий единственный аргумент типа записи. Он называется "конструктором копирования". Синтезированный метод "клонирования" общедоступног…
21 сен '20 в 17:35
2 ответа

C# 9 программы верхнего уровня без csproj?

Одна из особенностей будущего C# 9 - это так называемые программы верхнего уровня. Чтобы вы могли просто написать следующее без классов. using System; Console.WriteLine("Hello World!"); и dotnet run запустит его для вас. У меня работает, н…
17 окт '20 в 09:05
1 ответ

Могу ли я скопировать и добавить в новый производный экземпляр с помощью выражения "with" записи C# 9?

Предположим, у меня есть следующее: public record Settings { public int Setting1 { get; init; } } public record MoreSettings : Settings { public string Setting2 { get; init; } } ... var settings = new Settings { Setting1 = 1 }; // This is an error -…
27 окт '20 в 18:14
6 ответов

C# 9 проверка записей

С новым типом записи C# 9, как можно внедрить проверку пользовательского параметра/ проверку нуля / и т.д. во время создания объекта без необходимости перезаписывать весь конструктор? Что-то похожее на это: record Person(Guid Id, string FirstName, s…
11 ноя '20 в 13:09