День 1296. #ЧтоНовенького #CSharp11
Обзор Новинок C# 11. Окончание
Начало
4. Обобщённые атрибуты
До C# 11 передача типа в атрибут требовала параметра типа Type и передачи значения через typeof
[MyAttr(typeof(string))]
Теперь можно делать обобщённые атрибуты:
public class MyAttr<T> : Attribute { }
…
[MyAttr<string>]
Единственное ограничение, что это должен быть полностью сконструированный тип. Попытка использовать в атрибуте параметр типа обобщённого класса приведёт к ошибке компиляции:
public class MyAttr<T> : Attribute { }
public class MyClass<T>
{
[MyAttr<T>] // Ошибка компиляции
public MyClass()
{
}
}
5. Шаблоны списков
Шаблоны списков позволяют сопоставлять шаблоны для элементов массива или списка. Здесь у нас есть несколько вариантов.
При явном указании значений массив должен будет строго соответствовать шаблону:
public bool Is_1_3_5(int[] numbers)
{
return numbers is [1, 3, 5];
// numbers должен быть длиной 3
// и иметь элементы 1, 3 и 5
}
Символ пустой переменной _ соответствует единичному элементу с любым значением:
numbers is [1, _, 5];
// numbers должен быть длиной 3
// и иметь элементы 1, <любое целое число> и 5
Две точки .. будут соответствовать 0 или более элементов:
numbers is [1, .., 5];
// numbers может быть любой длины
// должен начинаться с 1 и заканчиваться 5
Также можно указать, что значение может быть больше или меньше определённого:
numbers is [1, .., >=5];
// numbers может быть любой длины
// должен начинаться с 1
// и заканчиваться числом не меньше 5
Как видите, шаблоны дают нам множество вариантов проверки элементов списка или массива.
Источник: https://www.roundthecode.com/dotnet/c-sharp-11-preview-features-dotnet-7