C# 如何将此循环编写为一行?
我不知道这是否可能,但让我问你。如何使用(例如)LINQ以更短的方式编写下面的循环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()); }
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
的调用吗?它多次枚举。