【问题标题】:Determine programmatically the index in the solution of project- C#以编程方式确定项目解决方案中的索引-C#
【发布时间】:2015-09-10 12:40:12
【问题描述】:

方法Solution.Projects.Index(Object index)获取项目索引为编号。

我知道项目的名称。如何以编程方式确定该项目解决方案中的索引?

【问题讨论】:

标签: c# solution visual-studio-project


【解决方案1】:

你可以使用 linq:

string yourProject = "ProjectName";
var query = Solution.Projects.Cast<Project>()
            .Select((p, i) => new { Name = p.Name, Index = i})
            .First(p => p.Name == yourProject).Index;

【讨论】:

  • OP 问,他怎么能找到“这个项目的解决方案中的索引”,而不是项目本身,或者我错过了什么?
  • 此代码导致以下错误:“EnvDTE.Projects”不包含“Cast”的定义,并且没有接受“EnvDTE.Projects”类型的第一个参数的扩展方法“Cast”可能是找到(您是否缺少 using 指令或程序集引用?)
  • 添加using System.Linq,这是System.Linq.Enumerable的扩展方法
  • 项目的索引是从1开始的,这段代码是从0返回的,要怎么改才能返回正确的索引呢?
  • 所有集合中的索引从 0 开始,如果您愿意,可以在结果中加 1。
【解决方案2】:

如果你有项目的名称,你可以遍历所有项目以找到所需项目的索引:

int index = 0;
foreach(Project project in dte.Solution.Projects)
{
    if (string.Equals(project.Name, "desired project name"))
    {
        break;
    }
    index++;
}

另一方面,为什么您实际上需要项目的索引?您也可以使用Item 方法以项目名称作为参数。

传递给 index 的值是一个整数,它是其集合中 Project 对象的索引。 index 的值也可以是一个字符串值,相当于集合中项目的名称。

【讨论】:

  • 为什么用 string.Equals 代替 == ?
  • @PTwr,更明确;另外,您还可以指定StringComparison 参数;加上习惯。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 2011-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多