使用 C# 8,我们获得了获取“子列表”的范围。
虽然这有效:
var array = new string[] { "abc", "def", "ghi" };
var subArray = array[0..1]; // works
Run Code Online (Sandbox Code Playgroud)
这不会:
var list = new List<string> { "abc", "def", "ghi" };
var subList = list[0..1]; // does not work
Run Code Online (Sandbox Code Playgroud)
如何在列表中使用范围?
CSh*_*pie 11
只是为了完整起见,我知道这并不完全是 OP 所要求的。
List<T>有一个GetRange-方法。
https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1.getrange?view=net-5.0
List<?> range = list.GetRange(0,5);
Run Code Online (Sandbox Code Playgroud)
它与新的语言功能没有太大关系,但它确实做到了它所说的。
请不要ToArray仅仅为了使用那个奇特的新语言功能而使用。这是不值得的开销。
yaa*_*kov 11
列表本身不支持范围。但是,如果您只有一个 Range,您可以创建一个有用的扩展方法,如下所示:
public static class ListExtensions
{
public static List<T> GetRange<T>(this List<T> list, Range range)
{
var (start, length) = range.GetOffsetAndLength(list.Count);
return list.GetRange(start, length);
}
}
Run Code Online (Sandbox Code Playgroud)
然后您可以使用它来获取您的子列表:
var list = new List<string> { "abc", "def", "ghi" };
var subList = list.GetRange(0..1);
Run Code Online (Sandbox Code Playgroud)
您可以使用ToArray()方法来解决问题:
var list = new List<string> { "abc", "def", "ghi" };
var subList = list.ToArray()[0..1]; // works
Run Code Online (Sandbox Code Playgroud)
但请注意,List<T>具有GetRange做同样事情的方法:
var list = new List<string> { "abc", "def", "ghi" };
var subList = list.GetRange(0,1);//abc
Run Code Online (Sandbox Code Playgroud)