C#代码段文字未正确扩展

时间:2015-10-27 20:05:49

标签: c# code-snippets

我正面临一个奇怪的问题,即尝试围绕执行参数检查的简单Guard类构建自定义代码段。

Guard Class

public sealed class Guard
{
    public static void Null(string paramName, object value)
    {
        if (value == null) throw new ArgumentNullException(paramName);
    }
}

代码段

<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <CodeSnippet Format="1.0.0">
<Header>
  <Title>Guard Guid Check</Title>
  <Author>Chris Richner</Author>
  <Description></Description>
  <HelpUrl></HelpUrl>
  <SnippetTypes />
  <Keywords />
  <Shortcut>gg</Shortcut>
</Header>
<Snippet>
  <References />
  <Imports>
    <Import>
      <Namespace>Foundation</Namespace>
    </Import>
  </Imports>
  <Declarations>
    <Literal Editable="true">
      <ID>argument</ID>
      <Type>System.Guid</Type>
      <ToolTip />
      <Default></Default>
      <Function />
    </Literal>
  </Declarations>
  <Code Language="csharp" Kind="" Delimiter="$"><![CDATA[Guard.Guid(nameof($argument$), $argument$);$selected$$end$]]></Code>
    </Snippet>
  </CodeSnippet>
</CodeSnippets>

应生成以下代码

Guard.Null(nameof(arg), arg);

但这不起作用,因为只有第一个参数$ literal在Visual Studio 2015 RTM代码编辑器中突出显示,最后填充了给定的参数名称。

我想念什么?谢谢!

1 个答案:

答案 0 :(得分:1)

请尝试以下操作。

<CodeSnippet Format="1.1.0" xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <Header>
    <Title>Guard Guid Check</Title>
    <Author>Chris Richner</Author>
    <Shortcut>gg</Shortcut>
    <Description></Description>
    <SnippetTypes>
      <SnippetType>Expansion</SnippetType>
      <SnippetType>SurroundsWith</SnippetType>
    </SnippetTypes>
  </Header>
  <Snippet>
    <Declarations>
      <Literal>
        <ID>argument</ID>
        <ToolTip>Enter argument name</ToolTip>
        <Default>argument</Default>
      </Literal>
    </Declarations>
    <Code Language="CSharp"><![CDATA[
    Guard.Null(nameof($argument$), $argument$);
    ]]></Code>
  </Snippet>
</CodeSnippet>

查看您的代码有一些我不认识的事情。 1)我不确定$ selected $$ end是什么用于2)我不确定语言属性(csharp)是否区分大小写。

我收集了您的信息并将其放在我知道从VS 2005到VS 2013中正常工作的片段中。然后我测试了该片段,它对我来说正常工作。