Обзор Новинок 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