C# 12 alias для любых типов
Директива using alias в C# 12 стала более гибкой и теперь позволяет создавать алиасы для любых типов, а не только для именованных. Это значит, что вы можете создавать алиасы для tuples, указателей, массивов, обобщённых типов и т. д. Вместо полной структурной формы tuple теперь можно дать короткий описательный алиас...
Директива using alias в C# 12 стала более гибкой и теперь позволяет создавать алиасы для любых типов, а не только для именованных. Это значит, что вы можете создавать алиасы для tuples, указателей, массивов, обобщённых типов и т. д. Вместо полной структурной формы tuple теперь можно дать короткий описательный алиас и использовать его где угодно.
Быстрый пример с алиасом для tuple. Сначала объявление алиаса:
using Point = (int x, int y);
Дальше используйте его как любой другой тип. Можно применять как тип возвращаемого значения, в списке параметров метода или даже для создания новых экземпляров этого типа. Ограничений практически нет.
Пример использования объявленного выше tuple-алиаса:
Point Copy(Point source)
{
return new Point(source.x, source.y);
}
Как и раньше, алиасы типов действуют только в том файле, в котором они объявлены.
Ограничения
По крайней мере пока, для всего, что не является примитивом, нужно указывать полное имя типа. Например:
using CarDictionary = System.Collections.Generic.Dictionary<string, ConsoleApp8.Car<System.Guid>>;
Максимум, на чём можно сэкономить, — это пространство имён вашего приложения, если объявить алиас внутри самого namespace.
namespace ConsoleApp8
{
using CarDictionary = System.Collections.Generic.Dictionary<string, Car<System.Guid>>;
}
Error CS8652
The feature ‘using type alias’ is currently in Preview and unsupported. To use Preview features, use the ‘preview’ language version.
Эта ошибка означает, что ваш проект ещё не использует C# 12, поэтому новые возможности языка недоступны. Если хотите перейти на C# 12 и не знаете как, загляните в наше руководство по переходу проекта на C# 12.
Comments
Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.