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
Visual studio 2010 如何在EditPoint.AbsoluteCharOffset的iTextEdit中找到等效位置_Visual Studio 2010_Vs Extensibility - Fatal编程技术网

Visual studio 2010 如何在EditPoint.AbsoluteCharOffset的iTextEdit中找到等效位置

Visual studio 2010 如何在EditPoint.AbsoluteCharOffset的iTextEdit中找到等效位置,visual-studio-2010,vs-extensibility,Visual Studio 2010,Vs Extensibility,我试图在VisualStudio2010扩展中使用新的文本编辑器代码模型删除类主体。也就是说,我正在尝试使用ITextEdit上的Delete方法删除花括号之间的所有内容 我可以使用 codeClass.GetStartPoint(vsCMPart.vsCMPartBody).CreateEditPoint().AbsoluteCharOffset 及 编解码器类接口上的方法。如果我随后从当前IWpfTextViewHost的ITextBuffer获取ITextEdit,然后尝试删除: iTe

我试图在VisualStudio2010扩展中使用新的文本编辑器代码模型删除类主体。也就是说,我正在尝试使用ITextEdit上的Delete方法删除花括号之间的所有内容

我可以使用

codeClass.GetStartPoint(vsCMPart.vsCMPartBody).CreateEditPoint().AbsoluteCharOffset

编解码器类接口上的方法。如果我随后从当前IWpfTextViewHost的ITextBuffer获取ITextEdit,然后尝试删除:

iTextEdit.Delete(startCharOffset, endCharOffset - startCharOffset); 
删除不正确。在旧模型上的AbsoluteCharOffset和新文本模型中的位置之间似乎没有1:1的映射

我如何在这两个模型之间进行交互

提前感谢您的帮助。

AbsoluteCharOffset返回的值实际上不是绝对字符偏移量,尽管\r\n可能是您的文件使用的值。进行转换的最佳方法是获取行号和列偏移量,可能是一种辅助方法,如:

SnapshotPoint SnapshotPointFromEditPoint(EditPoint editPoint, ITextSnapshot snapshot)
{
    int lineNumber = editPoint.Line - 1;
    int offset = editPoint.LineCharOffset - 1;
    return snapshot.GetLineFromLineNumber(lineNumber).Start + offset;
}
几个月前,我刚刚从Dev10中的一个性能问题中了解到这一点,在Dev10中,计算绝对CharOffset非常昂贵。我建议尽量避免使用它,因为AbsoluteCharOffset返回的值实际上不是绝对字符偏移量,即使\r\n可能是文件使用的值。进行转换的最佳方法是获取行号和列偏移量,可能是一种辅助方法,如:

SnapshotPoint SnapshotPointFromEditPoint(EditPoint editPoint, ITextSnapshot snapshot)
{
    int lineNumber = editPoint.Line - 1;
    int offset = editPoint.LineCharOffset - 1;
    return snapshot.GetLineFromLineNumber(lineNumber).Start + offset;
}
几个月前,我刚刚从Dev10中的一个性能问题中了解到这一点,在Dev10中,计算绝对CharOffset非常昂贵。我建议你尽量避免去任何地方