我在哪里可以找到新的 Span<T>?
Posted
技术标签:
【中文标题】我在哪里可以找到新的 Span<T>?【英文标题】:Where do I find the new Span<T>? 【发布时间】:2018-05-18 21:54:59 【问题描述】:每个人都在写新类型 Span<T>
有多棒,所以我急切地想开始在我的库中重写几个方法,但是我在哪里可以找到它呢?我已将 Visual Studio 2017 更新到最新版本 15.5.0,其中更改日志显示:
C# 编译器现在支持 7.2 语言功能集,包括:
通过 ref struct 修饰符支持在整个 Kestrel 和 CoreFX 中使用的Span<T>
类型。
但是当我尝试使用它时,我的代码出现错误,并且智能感知无法解决它。这是一个 .net 4.6.2 项目,语言版本设置为 latest minor。
我是否需要安装一些 NuGet 包才能使用它?我想不通。
【问题讨论】:
确实令人困惑。这篇文章msdn.microsoft.com/en-us/magazine/mt814808.aspx 将 Span 描述为框架的一部分:System.Span<T> is a new value type at the heart of .NET.
,只是在最后的What's Next
部分提到需要安装System.Memory
NuGet 包。
@user276648 现在包已经发布了,你至少可以很容易地在主要的 nuget-feed 中找到它。在我问这个问题的时候,它只能在 core-fx 的一些奇怪的替代提要中找到,要弄清楚这个问题并不容易:-|
【参考方案1】:
您需要安装 System.Memory
包的预发布版本(选中 nuget 管理器中的“包含预发布”复选框)。然后只需使用Span
(它在System
命名空间中)。
【讨论】:
他们为什么要发布一个支持某些仍处于测试阶段的编译器?难怪这如此令人困惑:-|所以这实际上意味着嘿!,我们的编译器现在支持一个新类型Span<T>
,但你不能使用它,因为我们还没有真正发布它
@t3chb0t 它与编译器并不完全相关。该包已经编译,因此与您机器上的编译器版本无关。但是新版本的编译器提供了对这种类型的用例有用的功能(但即使没有这种类型的课程,这些功能也很有用)。
好的,但是我不明白为什么更改日志提到了编译器?如果这个新特性可以在没有专门的编译器的情况下使用,为什么还要麻烦呢?他们不能只发布包吗?每个人都会很乐意阅读这是带有新 Span<T>
的软件包 :-( 我以为它会与此更新一起出现,但显然它没有。
@t3chb0t 引用您在问题中提到的“通过 ref struct 修饰符支持在整个 Kestrel 和 CoreFX 中使用的 SpanVisual Studio 2019:如果您使用的是完整的 .NET Framework(例如 4.7.2):
-
转到 NuGet 包管理器
搜索 Microsoft 的 System.Memory 包并安装。
现在您可以使用Span<T>
。
不再需要搜索预发布版本。
【讨论】:
以上是关于我在哪里可以找到新的 Span<T>?的主要内容,如果未能解决你的问题,请参考以下文章
我在哪里可以找到一些关于 google adwords 的例子?