gpt4 book ai didi

c# - 枚举当前 visual studio 项目中的所有文件

转载 作者:行者123 更新时间:2023-11-30 19:29:07 24 4
gpt4 key购买 nike

我正在尝试编写一个简单的 Visual Studio 2012 扩展。我已经生成了扩展模板,并且可以从工具菜单中调出一个对话框。

我想枚举当前打开的项目中的所有文件,然后根据一些规则过滤它们。我正在寻找的是返回 IEnumerable 的代码片段。 FileHandle 应具有以下接口(interface)或类似的东西。

interface IFileHandle {
// Return the string
string Path;
// Open the file in the editor
void OpenEditorFor();
}

仅供引用,我正在尝试为 visual studio 构建一个模糊文件查找器。当前文件搜索不太适合,因为您必须进行精确匹配。我可以编写索引器和模糊搜索器,但 Visual Studio 扩展编写的界面目前有点神秘。

最佳答案

这似乎是一个简单的答案。在视觉的背景下工作室扩展将返回所有文件。

public IEnumerable<ProjectItem> Recurse(ProjectItems i)
{
if (i!=null)
{
foreach (ProjectItem j in i)
{
foreach (ProjectItem k in Recurse(j))
{
yield return k;
}
}

}
}
public IEnumerable<ProjectItem> Recurse(ProjectItem i)
{
yield return i;
foreach (ProjectItem j in Recurse(i.ProjectItems ))
{
yield return j;
}
}

public IEnumerable<ProjectItem> SolutionFiles()
{
Solution2 soln = (Solution2)_applicationObject.Solution;
foreach (Project project in soln.Projects)
{
foreach (ProjectItem item in Recurse(project.ProjectItems))
{
yield return item;
}
}
}

然后您可以用它做一些巧妙的技巧,比如在我的 CommandT 克隆的核心实现搜索功能。

private static string Pattern(string src)
{
return ".*" + String.Join(".*", src.ToCharArray());
}

private static bool RMatch(string src, string dest)
{
try
{
return Regex.Match(dest, Pattern(src), RegexOptions.IgnoreCase).Success;
}
catch (Exception e)
{
return false;
}
}

private static List<string> RSearch(
string word,
IEnumerable<string> wordList,
double fuzzyness)
{
// Tests have prove that the !LINQ-variant is about 3 times
// faster!
List<string> foundWords =
(
from s in wordList
where RMatch(word, s) == true
orderby s.Length ascending
select s
).ToList();

return foundWords;
}

像这样使用

var list = RSearch("bnd", SolutionFiles().Select(x=>x.Name))

关于c# - 枚举当前 visual studio 项目中的所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13374282/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com