簡體   English   中英

確定EnvDTE.Project是否可用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM