#c# #new-operator #syntactic-sugar
Вопрос:
Что нового без ввода в C#?
На работе я встретил следующий код:
throw new("some string goes here");
Есть new("some string goes here")
ли способ создавать строки в C# или это что-то другое?
Комментарии:
1. devblogs.microsoft.com/dotnet/welcome-to-c-9-0/…
2. Если возможно, вам следует обсудить использование этой функции со своей командой.
Dictionary<SomeVeryLongName, List<AnotherTooLongName>> _field = new()
это хорошее применение. Ваш пример-нет. Правило, которое мы применяем, таково : полный тип должен появляться по крайней мере один раз, предпочтительнееvar
(по привычке и в соответствии со старым кодом).
Ответ №1:
В конкретном случае throw
, throw new()
является сокращением для throw new Exception()
. Эта функция была введена в c# 9, и вы можете найти документацию в виде новых выражений с целевым типом.
Как вы можете видеть, есть довольно много мест, где его можно использовать (всякий раз, когда можно определить тип, который нужно создать), чтобы сделать код короче.
Место, где мне это нравится больше всего, — это поля/свойства:
private readonly Dictionary<SomeVeryLongName, List<AnotherTooLongName>> _data = new();
В качестве дополнительного примечания, throw
ing Exception
не рекомендуется, так как в большинстве случаев он недостаточно специфичен, поэтому я бы не рекомендовал этого делать throw new ("error");
. Существует довольно много конкретных исключений для использования, и если ни одно из них не сработает, подумайте о создании пользовательского исключения.
Ответ №2:
new()
Создает объект типа, который может быть выведен из контекста.
Так что вместо:
throw new System.Exception("hi");
вместо этого вы можете использовать эту сокращенную форму:
throw new ("hi");
Аналогично,
var s = new string("hello");
может быть заменен на:
string s = new("hello");