我正面临一个奇怪的问题,即尝试围绕执行参数检查的简单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代码编辑器中突出显示,最后填充了给定的参数名称。
我想念什么?谢谢!
答案 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中正常工作的片段中。然后我测试了该片段,它对我来说正常工作。