我必须经历一个包含不可用项目的大解决方案。这些不可用的项目不可用,因为它们的路径不再存在。如果这个解决方案要保留这些不可用的引用,是否有办法确定我循环的每个项目是否可用/不可用?
下面是一个循环,其目的是确定当前解决方案中的每个ProjectItem是否都已保存。但是,由于某些项目不可用,我不断获得空引用。
bool isDirty = false;
foreach (Project proj in sln.Projects) //sln is my current solution
{
if (proj == null) //hoping that might do the trick
continue;
foreach (ProjectItem pi in proj.ProjectItems)
{
if (pi == null) //hoping that might do the trick
continue;
if (!pi.Saved)
{
isDirty = true;
break;
}
}
}
答案 0 :(得分:3)
您可以在简单的LINQ
操作中重写此内容:
//import the LINQ extensions
using System.Linq;
// some code here;
bool isDirty = sln.Projects.Any(pr => pr.ProjectItems != null && !pr.Saved);
根据MSDN,_Solution.Projects
属性是Projects
类型,这是IEnumerable
没有通用的,所以你应该使用OfType<TResult>
扩展方法,就像这样:
bool isDirty = sln.Projects.OfType<Project>().Any(pr => pr.ProjectItems != null && !pr.Saved);
来自MSDN:
此方法是少数可以使用的标准查询运算符方法之一 应用于具有非参数化类型的集合,例如
ArrayList
。这是因为OfType<TResult>
扩展了类型IEnumerable
。OfType<TResult>
不仅可以应用于集合 它基于参数化的IEnumerable<T>
类型,但是 基于非参数化IEnumerable
类型的集合 还