.NET 7 发布了第 6 个预览版。
主要变化包括:
- 引入新的类型转换器
- 更新 System.Formats.Tar API
- 改进 Generic Math,方便 API 作者的使用
- 为 ML.NET 引入新的 Text Classification API,增加了最先进的深度学习技术对于自然语言处理
- 对源代码生成器的多项改进
- 用于 RegexGenerator 的新 Roslyn 分析器和修复器,以及在 CodeGen、可观察性、JSON 序列化 / 反序列化和使用流方面的多项性能改进
类型转换器
新增用于新添加的原始类型DateOnly
、TimeOnly
、Int128
、UInt128
和Half
的公开类型转换器。
namespace System.ComponentModel
{
public class DateOnlyConverter : System.ComponentModel.TypeConverter
{
public DateOnlyConverter() { }
}
public class TimeOnlyConverter : System.ComponentModel.TypeConverter
{
public TimeOnlyConverter() { }
}
public class Int128Converter : System.ComponentModel.BaseNumberConverter
{
public Int128Converter() { }
}
public class UInt128Converter : System.ComponentModel.BaseNumberConverter
{
public UInt128Converter() { }
}
public class HalfConverter : System.ComponentModel.BaseNumberConverter
{
public HalfConverter() { }
}
}
使用示例
TypeConverter dateOnlyConverter = TypeDescriptor.GetConverter(typeof(DateOnly));
// produce DateOnly value of DateOnly(1940, 10, 9)
DateOnly? date = dateOnlyConverter.ConvertFromString("1940-10-09") as DateOnly?;
TypeConverter timeOnlyConverter = TypeDescriptor.GetConverter(typeof(TimeOnly));
// produce TimeOnly value of TimeOnly(20, 30, 50)
TimeOnly? time = timeOnlyConverter.ConvertFromString("20:30:50") as TimeOnly?;
TypeConverter halfConverter = TypeDescriptor.GetConverter(typeof(Half));
// produce Half value of -1.2
Half? half = halfConverter.ConvertFromString(((Half)(-1.2)).ToString()) as Half?;
TypeConverter Int128Converter = TypeDescriptor.GetConverter(typeof(Int128));
// produce Int128 value of Int128.MaxValue which equal 170141183460469231731687303715884105727
Int128? int128 = Int128Converter.ConvertFromString("170141183460469231731687303715884105727") as Int128?;
TypeConverter UInt128Converter = TypeDescriptor.GetConverter(typeof(UInt128));
// produce UInt128 value of UInt128.MaxValue which equal 340282366920938463463374607431768211455
UInt128? uint128 = UInt128Converter.ConvertFromString("340282366920938463463374607431768211455") as UInt128?;
对源代码生成器的多项改进
添加了对IAsyncEnumerable<T>
(#59268), JsonDocument
(#59954),DateOnly
/TimeOnly
(#53539) 类型的源代码生成支持。例如:
[JsonSerializable(typeof(typeof(MyPoco))]
public class MyContext : JsonSerializerContext {}
public class MyPoco
{
// Use of IAsyncEnumerable that previously resulted
// in JsonSerializer.Serialize() throwing NotSupportedException
public IAsyncEnumerable<int> Data { get; set; }
}
// It now works and no longer throws NotSupportedException
JsonSerializer.Serialize(new MyPoco { Data = ... }, MyContext.MyPoco);
改进 Generic Math
.NET 6 发布了预览版的 Generic Math,此特性允许 .NET 开发者在通用代码中利用静态 API,包括运算符。Generic Math 极大地方便了 API 作者,因为他们使用的 API 将开始支持更多类型,而不需要每个数字类型都获得显式支持。
在 .NET 7 中,开发团队对实现进行了改进并响应了社区的反馈。有关更改和可用 API 的更多信息,点此查看。
详情查看发布公告。
为您推荐与 dotnet 相关的帖子:
暂无回复。