[英]Determining if a EnvDTE.Project is available
我不得不通過一個包含不可用項目的大解決方案。 這些不可用的項目不可用,因為它們的路徑不再存在。 如果這個解決方案是保留這些不可用的引用,是否有辦法確定我循環的每個項目是否可用/不可用?
下面是一個循環,其目的是確定當前解決方案中的每個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;
}
}
}
您可以在簡單的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
類型的集合。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.