.NET 7 Preview 7 发布,下一版本进入 RC 阶段

.NET 7 发布了最后一个预览版 Preview 7,在此之后将会进入 RC 阶段。

此版本主要变化包括对 System.LINQ、Unix 文件权限、底层结构、p/Invoke 源代码生成、代码生成和 websocket 的改进。

优化System.LINQ

System.Linq现在包含OrderOrderDescending方法,它们可以根据TIEnumerable进行排序。IQueryable现在也同样提供对此的支持。

用法

此前需要通过引用自身的值来调用OrderBy/OrderByDescending 

  var data = new[] { 2, 1, 3 };  var sorted = data.OrderBy(static e => e);  var sortedDesc = data.OrderByDescending(static e => e);

现在支持直接写成:

  var data = new[] { 2, 1, 3 };  var sorted = data.Order();  var sortedDesc = data.OrderByDescending();

支持 Unix 文件模式

此前 .NET 没有内置支持获取和设置 Unix 文件权限,这些权限用于控制哪些用户可以读取、写入和执行文件以及目录。而且 P/Invoking 手动调用 syscalls 并不容易,因为有些 syscalls 在不同的发行版上有不同的公开方式。例如,在 Ubuntu 上,你可能要对__xstat进行 Pinvoke,在 Red Hat 上对stat进行 Pinvoke,诸如此类。为此,Preview 7 引入了一个新的枚举:

  public enum UnixFileMode  {      None,      OtherExecute, OtherWrite, OtherRead,      GroupExecute, GroupWrite, GroupRead,      UserExecute, UserWrite, UserRead,       ...  }

用法

  // Create a new directory with specific permissions  Directory.CreateDirectory("myDirectory", UnixFileMode.UserRead | UnixFileMode.UserWrite | UnixFileMode.UserExecute);    // Create a new file with specific permissions  FileStreamOptions options = new()  {      Access = FileAccess.Write,      Mode = FileMode.Create,      UnixCreateMode =  UnixFileMode.UserRead | UnixFileMode.UserWrite,  };  using FileStream myFile = new FileStream("myFile", options);    // Get the mode of an existing file  UnixFileMode mode = File.GetUnixFileMode("myFile");    // Set the mode of an existing file  File.SetUnixFileMode("myFile", UnixFileMode.UserRead | UnixFileMode.UserWrite | UnixFileMode.UserExecute);

优化底层struct:支持ref 字段

.NET 7 运行时环境现在完全支持 ByRefLike 类型中的ref字段(即ref struct)。此功能背后包含大量的语言设计,例如改进底层结构。借助此功能,以前需要在运行时环境中进行专门处理的类型(例如Span<T>ReadOnlySpan<T>),现在可以在 C# 中完全实现。

展开阅读全文
发表评论

相关文章