Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在VisualStudio2010中突出显示Goto_C#_Visual Studio 2010 - Fatal编程技术网

C# 在VisualStudio2010中突出显示Goto

C# 在VisualStudio2010中突出显示Goto,c#,visual-studio-2010,C#,Visual Studio 2010,我目前正在翻译旧的生成的C#代码,其中充满了goto。请不要对此发表评论,我知道这很可怕。 无论如何,有没有一种方法/扩展/其他方法可以让goto语句更具可读性?很难找到代码跳转的地方。我不想使用搜索功能,因为它会让我迷失方向 我所发现的是: 但它不起作用 你能推荐点什么吗?试试ReSharper's 或CODURUH的 你可以考虑。code>goto语句将得到如下箭头:。将光标悬停在箭头上会突出显示标签后面的语句(如果它已经可见),单击它会使其可见并将光标移动到该语句。还要注意,您可以使用“C

我目前正在翻译旧的生成的C#代码,其中充满了goto。请不要对此发表评论,我知道这很可怕。 无论如何,有没有一种方法/扩展/其他方法可以让goto语句更具可读性?很难找到代码跳转的地方。我不想使用搜索功能,因为它会让我迷失方向

我所发现的是: 但它不起作用

你能推荐点什么吗?

试试ReSharper's


或CODURUH的

你可以考虑。code>goto语句将得到如下箭头:。将光标悬停在箭头上会突出显示标签后面的语句(如果它已经可见),单击它会使其可见并将光标移动到该语句。

还要注意,您可以使用“Ctrl”+“-”跳回代码中您所看到的最后一个位置。
这可能非常明显,但在我看来,CSharpie可能不知道这个热键。

可能有点晚了,但您可以使用Visual Studio扩展性构建自己的热键(因此也可以添加自定义行为):。这些步骤是:

1) 创建编辑器分类器项目(内置项目类型)

2) 删除现有的类文件

3) 在下面添加代码。它会将代码部分中的所有“goto”语句着色为红色:

internal class GotoTagger : ITagger<GotoTag>
{
    private ITextSearchService _textSearchService;
    private ITextStructureNavigator _textStructureNavigator;

    event EventHandler<SnapshotSpanEventArgs> ITagger<GotoTag>.TagsChanged { add { } remove { } }

    public GotoTagger(ITextSearchService textSearchService, ITextStructureNavigator textStructureNavigator)
    {
        _textSearchService = textSearchService;
        _textStructureNavigator = textStructureNavigator;
    }

    public IEnumerable<ITagSpan<GotoTag>> GetTags(NormalizedSnapshotSpanCollection spans)
    {
        if (spans.Count == 0)
            yield break;

        if (spans.Count > 0)
        {
            // look for 'goto' occurrences
            foreach (SnapshotSpan span in _textSearchService.FindAll(new FindData("goto", spans[0].Snapshot, FindOptions.WholeWord | FindOptions.MatchCase, _textStructureNavigator)))
            {
                yield return new TagSpan<GotoTag>(span, new GotoTag());
            }
        }
    }
}


    [Export(typeof(IViewTaggerProvider))]
    [TagType(typeof(TextMarkerTag))]
    [ContentType("code")] // only for code portion. Could be changed to csharp to colorize only C# code for example
    internal class GotoTaggerProvider : IViewTaggerProvider
    {
        [Import]
        internal ITextSearchService TextSearchService { get; set; }

        [Import]
        internal ITextStructureNavigatorSelectorService TextStructureNavigatorSelector { get; set; }

        public ITagger<T> CreateTagger<T>(ITextView textView, ITextBuffer buffer) where T : ITag
        {
            if (textView.TextBuffer != buffer)
                return null;

            return new GotoTagger(TextSearchService, TextStructureNavigatorSelector.GetTextStructureNavigator(buffer)) as ITagger<T>;
        }
    }

    internal class GotoTag : TextMarkerTag
    {
        public GotoTag() : base("goto") { }
    }

    [Export(typeof(EditorFormatDefinition))]
    [Name("goto")]
    [UserVisible(true)]
    internal class GotoFormatDefinition : MarkerFormatDefinition
    {
        public GotoFormatDefinition()
        {
            BackgroundColor = Colors.Red;
            ForegroundColor = Colors.White;
            DisplayName = "Goto Word";
            ZOrder = 5;
        }
    }

内部类GoTotager:ITagger
{
私有的ITextSearchService\u文本搜索服务;
私有ITextStructureNavigator\u textStructureNavigator;
事件事件处理程序ITagger.TagsChanged{add{}remove{}
公共GoTotager(ITextSearchService textSearchService、ITextStructureNavigator textStructureNavigator)
{
_textSearchService=textSearchService;
_textStructureNavigator=textStructureNavigator;
}
公共IEnumerable GetTags(normalizedSnapshotSpan集合范围)
{
如果(spans.Count==0)
屈服断裂;
如果(spans.Count>0)
{
//查找“转到”事件
foreach(在_textSearchService.FindAll中的快照span(新的FindData(“goto”,span[0]。快照,FindOptions.WholeWord | FindOptions.MatchCase,_textStructureNavigator)))
{
返回新标记span(span,new GotoTag());
}
}
}
}
[导出(类型(IViewTaggerProvider))]
[TagType(typeof(TextMarkerTag))]
[ContentType(“code”)]//仅适用于代码部分。例如,可以更改为csharp以仅对C代码着色
内部类GotoTaggerProvider:IViewTaggerProvider
{
[进口]
内部ITextSearchService文本搜索服务{get;set;}
[进口]
内部ITextStructureNavigatorSelectorService文本结构NavigatorSelector{get;set;}
公共ITagger CreateTagger(ITextView textView,ITextBuffer buffer),其中T:ITag
{
如果(textView.TextBuffer!=缓冲区)
返回null;
将新的GoTotager(TextSearchService、TextStructureNavigatorSelector.GetTextStructureNavigator(buffer))作为ITagger返回;
}
}
内部类GotoTag:TextMarkerTag
{
public GotoTag():base(“goto”){}
}
[导出(typeof(EditorFormatDefinition))]
[姓名(“转到”)]
[用户可见(正确)]
内部类GotoFormatDefinition:MarkPerformatDefinition
{
公共GotoFormatDefinition()
{
背景颜色=颜色。红色;
ForegroundColor=颜色。白色;
DisplayName=“转到Word”;
ZOrder=5;
}
}

不好的可读性正是我们避免使用
goto
的原因吗?好吧,我认为有一个想法可以尝试,使用工具->选项->文本编辑器->格式->缩进->标签缩进->将goto标签放在最左边的列中,这至少会使所有标签都很快被注意到。您提到的扩展是用于代码中符号之间的导航,而不是用于查找GOTO语句。@Aschratt您应该阅读我写的内容。我不打算使用goto,但我需要帮助来摆脱它,这个过程的一部分是首先让mroe能够阅读这些东西。@CSharpie:我理解你写的东西。。。这只是一个修辞问题;)更多的是关于它去哪里的线路。我还是会保留你的密码,因为我现在有了更多的想法。我知道,谢谢。主要原因是很难理解代码的作用。虽然跳回起点会有所帮助,但在嵌套的事情中,找出发生了什么并没有帮助。