获取列表的范围作为参考

-1 c# ref .net-7.0

我想从列表中获取一个子列表并对其执行操作。并且结果应该应用于主列表

var myNumber = new List<int>() { 1, 5, 9, 7, 2, 8, 2 };
var subNumbers = myNumber.GetRange(2, 4); // { 9, 7, 2, 8 }
for (int i = 0; i < subNumbers.Count; i++)
{
    subNumbers[i] = (int)Math.Pow(subNumbers[i], 2); // {81, 49, 4, 64 }
}

// For example, applied to 'myNumbers'

WriteLine(string.Join(", ", myNumbers)); // I want the output to be: { 1, 5, 81, 49, 4, 64, 2 }
Run Code Online (Sandbox Code Playgroud)

can*_*on7 5

您可以使用CollectionsMarshal.AsSpan<T>(List<T> list)

var myNumber = new List<int>() { 1, 5, 9, 7, 2, 8, 2 };
var subNumbers = CollectionsMarshal.AsSpan(myNumber).Slice(2, 4);
for (int i = 0; i < subNumbers.Length; i++)
{
    subNumbers[i] = (int)Math.Pow(subNumbers[i], 2)
}
Run Code Online (Sandbox Code Playgroud)

请参阅 SharpLab


MSDN 页面有警告:

使用List<T>时不得添加或移除物品。Span<T>

请务必注意该警告!如果您从 中添加项目,则List<T>后备数组可能会被重新分配,并且 将会Span<T>指向 不再使用的内存List<T>。如果您删除 视图中的项目Span<T>,则Span<T>不会更新以排除已删除的项目,并且可能仍包含它们。