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

Muz*_*zib 0 c# .net-core

我试图声明这样的跨度列表:

public List<Span<char>> spanList;
Run Code Online (Sandbox Code Playgroud)

但是似乎我无法执行此操作,因为错误显示类型'Span'不能用作类型参数

那么,我在做什么错呢?谢谢。

Ada*_*mon 8

作为替代方案,您可以创建List<Memory<char>>. 然后您可以获得Span<char>各个元素的 a :

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;
Run Code Online (Sandbox Code Playgroud)

但是,我们确实需要了解您的用例,以便能够判断这一切是否对您有用。

顺便说一句,我推荐这篇关于该主题的文章。仔细阅读后,您将能够确定上面的代码在您的用例中是否有意义。


Eri*_*ert 5

我试图声明这样的跨度列表:

public List<Span<char>> spanList;
Run Code Online (Sandbox Code Playgroud)

那不合法

但是似乎我无法执行此操作,因为错误提示“ Span”类型不能用作类型参数。

正确。跨度不能用作类型参数。

我究竟做错了什么?

您正在使用span作为类型参数。那不合法 这就是为什么错误消息说span不能用作类型参数的原因。

由于您已经知道这一点,因此不清楚您为什么提出这个问题。你到底在问什么

跨度是非常特殊的类型,出于非常特定的目的而存在。如果您尝试将跨度放入列表中,则说明您做错了非常多的事情,因为您正在直接违反跨度的预期目的。跨度的存在是在某些非常有限的情况下为您提供更好的性能,而为获得更好的性能而付出的代价是对跨度使用方式的限制

这听起来很像我们所说的“ XY”问题。您有问题,对解决问题有疯狂的想法,疯狂的想法行不通,现在您是在问有关疯狂想法的问题,而不是真正的问题。提出有关实际问题的问题。

还有其他选择吗?

列出除跨度以外的内容,或使用除列表以外的其他内容来管理您的跨度。

由于我们不知道您要解决什么问题,因此我们无法帮助您解决问题。 我们不知道您要解决的问题是因为您没有说要解决的问题。帮助我们帮助您。

到目前为止,我们所知道的只是您尝试做非法的事情,然后询问有关错误消息的问题,该错误消息清楚地表明您正在做的事情是非法的。