我(或可能是其他任何人)拥有一个我需要迭代的对象列表然后与属性列表进行交互并不少见.我使用嵌套循环,如下所示:
IListlistOfObjects; IList listOfProperties; foreach (T dataObject in listOfObjects) { foreach (TProperty property in listOfProperties) { //do something clever and extremely useful here } }
这是针对此问题的时间和性能测试模式吗?或者是否有更高性能,更优雅或更简单的乐趣(当然仍然可读和可维护)?
上面的代码并没有让我微笑.有人可以帮助我的循环带来一些快乐吗?
谢谢!
更新:我在最积极的意义上使用术语"书呆子".作为维基百科定义的一部分,它将"指的是一个热衷于追求智力活动的人"."代码书呆子"我指的是一个关心不断改进自己作为程序员的人,寻找新的,新颖的,优雅的快速,可维护和美丽的编码方式!他们很高兴退出VB6并希望聪明的人批评他们的代码并帮助他们自己聪明.(注意:他们也喜欢制作以-ify结尾的新单词).
最后的说明:
感谢Dave R,Earwicker和TheSoftwareJedi让我沿着Linq路走下去.这只是我正在寻找的那种快乐代码!
嵌套循环当然没有错.它们快速,可读,并且自软件开发迈出第一步以来就已存在.
只要你想,你遍历集合执行操作,您可能会发现LINQ将是一个有趣的途径去探索:
http://msdn.microsoft.com/en-us/vcsharp/aa904594.aspx
你将自己限制在更高版本的框架(3.5以后),但实际上你可能会发现功能编程方法非常优雅.在起作用,当你走这条路的其他语言功能包括lambda表达式和匿名方法,这是他们自己的权利迷人.
祝你好运,我希望你在路上玩得开心 - 这是一个很好的方法:)
看起来你正在尝试将笛卡尔加入两个列表,并应用where子句.这是一个简单的示例,显示了执行此操作的Linq语法,我认为这是您正在寻找的.list1和list2可以是任何IEnumerable,你的where子句可以包含更详细的逻辑,在你的select子句中你可以抽出你需要的东西.
var list1 = Enumerable.Range(1, 100); var list2 = Enumerable.Range(1, 100); foreach (var item in from a in list1 from b in list2 where a % b == 0 select new { a, b }) { Console.WriteLine(item); };
表演将与您发布的内容相同 - 不希望在这方面误导.我更喜欢这种Linq语法.
foreach (var pair in from obj in listOfObjects from prop in listOfProperties select new {obj, prop}) { Console.WriteLine(pair.obj + ", " + pair.prop); }