这是“更好”,更快,更容易阅读:嵌套Linq比foreach循环更快吗?
var viewsOnSheet = templateSheet.GetAllViewports()
.Select(x => doc.GetElement(x))
.Cast<Viewport>()
.Select(x => doc.GetElement(x.ViewId))
.Cast<View>();
...比这
foreach (ElementId id in templateSheet.GetAllViewports())
{
Viewport vp = doc.GetElement(id) as Viewport;
View v = doc.GetElement(vp.ViewId) as View;
}
他们都工作,我只是好奇,如果有一些编程标准,我会被这么多嵌套的Linq调用违反。什么更容易理解?我个人倾向于foreach
循环。
谢谢!
嗯,在这种情况下,我不会使用'as' - 如果类型错误,您宁愿有一个描述性的'InvalidCastException'或一个'NullReferenceException',它不会告诉您这个元素是否实际上是null或对错误类型的非空引用?我可能会使用LINQ,但将演员直接放入“Select”调用中,而不是调用“Cast”。 –
因此而不是'.Select(x => doc.GetElement(x))''你会说'去选择(x =>(视口)doc.GetElement(x))'? – konrad
是的,我会的。但这实际上是一个基于意见的问题。 –