代码之家  ›  专栏  ›  技术社区  ›  Muzib hardyVeles

类型“Span<char>”不能用作类型参数

  •  0
  • Muzib hardyVeles  · 技术社区  · 6 年前

    public List<Span<char>> spanList;
    

    .

    2 回复  |  直到 6 年前
        1
  •  4
  •   Adam Simon    6 年前

    作为一种选择,您可以创建 List<Memory<char>> . 然后你就可以得到一个 Span<char> 对于单个元素:

    var someCharArray = "abcdefghij".ToCharArray();
    
    Memory<char> memory1 = someCharArray;
    var memory2 = memory1.Slice(1, 3);
    
    var list = new List<Memory<char>> { memory1, memory2 };
    
    // ...
    
    var span1 = list[0].Span;
    var span2 = list[1].Span;
    

    然而,我们确实需要知道您的用例,以便能够判断这一切是否对您有用。

    顺便说一下,我建议 this article on the topic . 仔细阅读之后,您将能够确定上面的代码在您的用例中是否有意义。

        2
  •  7
  •   Eric Lippert    6 年前

    public List<Span<char>> spanList;
    

    那是不合法的。

    对的。跨度不能用作类型参数。

    我做错什么了?

    既然你已经知道了,就不清楚你为什么要问这个问题。你到底在问什么?

    非常特殊的类型 存在于 . 如果你想把一个span放在一个列表中,那你就大错特错了,因为你的工作直接违背了span的预期目的。在某些非常有限的场景中,跨度的存在可以为您提供更好的性能,并且 为获得更好的性能而付出的代价是对如何使用跨度的限制

    这听起来很像我们所说的“XY”问题。你有一个问题,你有一个疯狂的想法如何解决它,疯狂的想法不起作用,现在你问一个疯狂的想法,而不是真正的问题。问一个关于真正问题的问题。

    或者列出一个跨度以外的列表,或者使用列表以外的列表来管理跨度。

    我们不知道你想解决什么问题,因为

    到目前为止,我们只知道你试图做一些非法的事情,然后问了一个关于错误信息的问题,这个问题清楚地表明你所做的是非法的。