【问题标题】:Why can't I assign a string to a ReadOnlySpan using .Net Framework 4.8?为什么我不能使用 .Net Framework 4.8 将字符串分配给 ReadOnlySpan?
【发布时间】:2022-12-16 20:02:39
【问题描述】:

我正在尝试使用ReadOnlySpan。我正在尝试将 guid 变量转换为 ReadOnlySpan,如下所示:

ReadOnlySpan<char> newGuid = Guid.NewGuid().ToString();

但是我得到编译错误

无法将类型 string 隐式转换为 System.ReadOnlySpan&lt;char&gt;

ReadOnlySpan 类型来自 System.Memory nuget 包。我该如何解决?

【问题讨论】:

  • 您确定要 ReadOnlySpan&lt;string&gt; 而不是 ReadOnlySpan&lt;char&gt; 吗?
  • @Luke 我什至试过 ReadOnlySpan<char>
  • 您使用的是什么版本的 .NET?
  • @Luke 我用的是 4.8
  • ReadOnlySpan 在 .Net Framework 4.8 中不存在

标签: c# .net-4.8


【解决方案1】:

ReadOnlySpan(无论您是从System.Memory package 还是从运行时获取)只有 implicit casts 用于数组。所以你需要先把你的字符串变成一个字符数组。

ReadOnlySpan<char> newGuid = Guid.NewGuid().ToString().ToCharArray();

在较新版本的 .Net 中,如 .Net 6,stringhas an implicit cast to ReadOnlySpan&lt;char&gt;,减轻了首先将字符串转换为数组的需要。

【讨论】:

  • 它与 ToCharArray 一起使用,但我没有看到在我的项目中添加了 System.Memory 包
  • 相信我,常规 4.8 运行时中的 ReadOnlySpan doesn't exist。获得它的唯一方法是通过 System.Memory nuget pacakge。 (learn.microsoft.com/en-us/dotnet/standard/memory-and-spans“对于较早的框架,Span<T> 和 Memory<T> 在 System.Memory NuGet 包中可用。”)您可以通过制作一个空的 4.8 控制台应用程序然后添加 System.Memory 来自行测试。您的应用很可能在依赖树的深处有 nuget 包。
【解决方案2】:

正如 gunr 所说,没有从 stringReadOnlySpan&lt;char&gt; 的隐式转换。
但是,您也可以直接使用AsSpan()

ReadOnlySpan<char> newGuid = Guid.NewGuid().ToString().AsSpan();

【讨论】:

    猜你喜欢
    • 2021-08-03
    • 1970-01-01
    • 2020-07-22
    • 1970-01-01
    • 2011-07-02
    • 2017-01-17
    • 2021-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多