对于我(或可能其他人)来说,拥有一个需要迭代的对象列表,然后与属性列表进行交互的情况并不罕见。我使用嵌套循环,如下所示:
IList<T> listOfObjects;
IList<TProperty> 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 之路。这正是我一直在寻找的那种快乐的代码!
看起来您正在尝试笛卡尔连接两个列表,并应用 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 语法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)