Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq 访问元素_Linq - Fatal编程技术网

Linq 访问元素

Linq 访问元素,linq,Linq,从以下位置返回的给定数据: public IEnumerable<IEnumerable<string>> ReadFile(string filename) { List<List<string>> items; // Read entire file content into items. ... return items; } 刚刚阅读了您的评论,您的问题是您得到了一个ArgumentOutOfRangeExcep

从以下位置返回的给定数据:

public IEnumerable<IEnumerable<string>> ReadFile(string filename)
{
   List<List<string>> items;
   // Read entire file content into items.
   ...
   return items;
 }

刚刚阅读了您的评论,您的问题是您得到了一个
ArgumentOutOfRangeException
,那么最可能的原因是组成行的一些
列表
对象没有足够的元素,无法在您请求的列中包含某些内容

例如,一个空行可能解析为一个空的
列表
,或者在位置0处只有一个
”。如果您试图获取位置5处的所有条目,那么当它到达此行时,它将抛出该异常

如果您有
列表项
,并且希望将
列表
置于第0位,则可以执行以下操作:

List<string> innerList = items[0];
你不需要使用linq,除非我错过了你想要做的事情

哦,我已经意识到你可能希望每个外部列表都有内部列表中的第n项。。。在这种情况下,在我的测试用例中,您所拥有的应该起作用:

List<List<string>> foo = new List<List<string>>(){new List<string>(){"1","2","3","4","5"},new List<string>(){"6","7","8","9","0"}};
var output = (from row in foo
          select row.ElementAt(2)).ToList();
output.Dump();
List foo=new List(){new List(){“1”、“2”、“3”、“4”、“5”},new List(){“6”、“7”、“8”、“9”、“0”};
变量输出=(来自foo中的行)
选择row.ElementAt(2)).ToList();
output.Dump();

为什么提供的代码不起作用?你说的“不起作用”是什么意思?它是否返回错误的数据?在我看来,它确实是正确的。它在执行时抛出throwargumentootfrangeexception。@LabDog:这将是
row.element在抛出它。我已经更新了我的答案,解释了为什么它可能会这样做,但它看起来像是沸腾了,因为您正在向其中传递坏数据。您的示例看起来很熟悉。然而,正如我提供的函数中所使用的,它会引发异常。正如我所说的,您的示例代码应该可以工作,并且在上面的上下文中可以工作。不知道更多的是什么出了问题,哪里很难说。如果您试图指定一个并非在所有行中都存在的列号(例如在上面的
select row.ElementAt(20)中),上述操作将失败
在试图调用ElementAt以获取不存在的元素时,会抛出一个
ArgumentOutOfRangeException
。此外,我不确定它是否会自动将
列表
强制转换为
IEnumerable
,但这可能取决于您的.NET版本。同意它应该可以工作,但不会。您的示例工作正常-谢谢。列表是自动强制转换为IEnumerable。我有其他方法可以正确地接受相同的“项”和输入函数。您的解决方案是正确的。我查看了源数据,正如您所指出的-en empty row!是的,空行导致了异常。清理源数据,然后重新运行,效果很好!谢谢!别忘了向上投票也是一种很好的方式,既可以表示答案是好的,也可以表示接受
List<string> innerList = items[0];
string item = items[0][0];
List<List<string>> foo = new List<List<string>>(){new List<string>(){"1","2","3","4","5"},new List<string>(){"6","7","8","9","0"}};
var output = (from row in foo
          select row.ElementAt(2)).ToList();
output.Dump();