我无法从列表中获取第一个项目.数据将从文本文件添加到列表中,但系统将返回System.Linq.Enumerable+<TakeIterator>d__25'1[System.String]而不是列表中的第一个项目.
以下是我的实施
string[] inputData = rawInputData.Split(',');
List<string> splitData = new List<string>(inputData.Length);
splitData.AddRange(inputData);
var numberOfCaves = splitData.Take(1);
Console.Write(numberOfCaves);
Run Code Online (Sandbox Code Playgroud)
我不确定为什么会这样,任何建议都会受到赞赏,谢谢!
只是用FirstOrDefault.
你也可以节省很多脚步,因为已经Split返回了一个数组(IEnumerable).因此,您不必创建新列表并添加它
问题本质上是,Take返回一个IEnumerable(所有意图和目的的列表,尚未遍历),Console.WriteLine不知道如何将其转换为string隐式,因此它写入其类型名称
var result = rawInputData.Split(',').FirstOrDefault();
if(result == null) // checks if there are no elements and results null
Console.WriteLine("darn");
else
Console.WriteLine(result);
Run Code Online (Sandbox Code Playgroud)
其他资源
返回序列的第一个元素,如果未找到任何元素,则返回默认值.
返回一个字符串数组,该数组包含此实例中由指定字符串或Unicode字符数组的元素分隔的子字符串.
Enumerable.Take(IEnumerable,Int32)方法
从序列的开头返回指定数量的连续元素.
- 返回
IEnumerable<TSource>包含输入序列开头的指定数量元素的IEnumerable.
此类中的方法提供标准查询运算符的实现,用于查询实现IEnumerable的数据源.标准查询运算符是遵循LINQ模式的通用方法,使您能够在任何基于.NET的编程语言中对数据表达遍历,过滤和投影操作.
此类中的大多数方法都定义为扩展IEnumerable的扩展方法.这意味着它们可以像实现IEnumerable的任何对象上的实例方法一样被调用.
返回值序列的查询中使用的方法在枚举查询对象之前不会使用目标数据.这称为延迟执行.在返回单例值的查询中使用的方法会立即执行并使用目标数据.
更新
作为旁注,结果在此不能为空. - AntonínLejsek
这确实是正确的
string.Split 将返回至少1个元素