Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.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
C# 如何将此循环编写为一行?_C#_Linq_C# 4.0_For Loop_Dataset - Fatal编程技术网

C# 如何将此循环编写为一行?

C# 如何将此循环编写为一行?,c#,linq,c#-4.0,for-loop,dataset,C#,Linq,C# 4.0,For Loop,Dataset,我不知道这是否可能,但让我问你。如何使用(例如)LINQ以更短的方式编写下面的循环 DataSet dsAllMonsters List<string> lstAllMonsters for (int i = 0; i < dsAllMonsters.Tables[0].Rows.Count; i++) { lstAllMonsters.Add(dsAllMonsters.Tables[0].Rows[i]["pokemonId"].ToString()); }

我不知道这是否可能,但让我问你。如何使用(例如)LINQ以更短的方式编写下面的循环

DataSet dsAllMonsters 
List<string> lstAllMonsters

for (int i = 0; i < dsAllMonsters.Tables[0].Rows.Count; i++)
{
    lstAllMonsters.Add(dsAllMonsters.Tables[0].Rows[i]["pokemonId"].ToString());
}
数据集dsAllMonsters
列出所有的怪物
对于(int i=0;i
我想可以

lstAllMonsters = dsAllMonsters.Tables[0].Rows
   .Cast<DataRow>()
   .Select(r => r["pokemonId"].ToString())
   .ToList();
lstAllMonsters=dsAllMonsters.Tables[0]。行
.Cast()
.Select(r=>r[“pokemonId”].ToString())
.ToList();

是的,可以在一行中完成:

lstAllMonsters = dsAllMonsters.Tables[0].Rows.Cast<DataRow>().Select(row => row["pokemonId"].ToString()).ToList();
lstAllMonsters=dsAllMonsters.Tables[0].Rows.Cast().Select(row=>row[“pokemonId”].ToString()).ToList();
但有时两行总比一行好。我想你会发现这更具可读性:

var rows = dsAllMonsters.Tables[0].Rows.Cast<DataRow>();
lstAllMonsters = rows.Select(row => row["pokemonId"].ToString()).ToList();
var rows=dsAllMonsters.Tables[0].rows.Cast();
lstAllMonsters=rows.Select(row=>row[“pokemonId”].ToString()).ToList();

在一行中实现它的另一种方法

dsAllMonsters.Tables[0].AsEnumerable().ToList().ForEach((DataRow a) => lstAllMonsters.Add(a["pokemonId"].ToString()));

是的,可以缩短。这回答了你的问题吗?请不要暗示问题您的工作场所是否缺少换行符?:-)你可能会丢失大括号,你甚至可以把
for
add
放在一行,但我需要问一下为什么。像这样一个简短的
for
语句本质上没有什么不可读的地方。@paxdiablo问题在于如何以最有效的方式编写代码。我在这里展示的方式是我一直在使用的蹩脚方式:我认为你必须强制转换行项,否则linq运算符不会亮起。任何非通用的操作都只能使用一些linq操作。这个linq非常棒。我真的需要掌握它谢谢:)这行不通:“System.Data.DataRowCollection”不包含“Select”的定义,并且找不到接受“System.Data.DataRowCollection”类型的第一个参数的扩展方法“Select”(是否缺少using指令或程序集引用?)@KarelFrajtak:你看到我在更新中添加了对
Cast
的调用吗?它多次枚举。