在Visual Studio Snippet中解析替换文字

时间:2012-11-27 16:09:42

标签: c# xml visual-studio code-snippets

  

可能重复:
  Formatting Literal parameters of a C# code snippet

编辑:这可以关闭。发现一个完全重复,似乎没有解决方案。 =(

完全重复: Formatting Literal parameters of a C# code snippet

编写代码段时有没有办法解析替换文字?我想做类似以下的事情:

<Literal>
    <ID>PropertyName</ID>
</Literal>

用户使用&#39; MyProperty&#39;替换PropertyName。结果是这样的:

private object _myProperty;

public object MyProperty
{get;set;}

注意大小写。我需要一种方法来解析替换文字并对其进行操作。下划线是微不足道的,只是一个硬编码的问题。

这里有机会吗?

编辑;完整片段:

<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <CodeSnippet Format="1.0.0">
    <Header>
      <Title>MVVM Public Property</Title>
      <Author>Michael Leide</Author>
      <Description>Adds a public property with private backing and property changed event support.</Description>
      <Shortcut>propvm</Shortcut>
    </Header>

    <Snippet>
      <Declarations>
        <Literal Editable="true">
          <ID>PropertyType</ID>
          <Default>object</Default>          
        </Literal>

        <Literal Editable="true">
          <ID>PropertyName</ID>
          <Default>PropertyName</Default>
        </Literal>
      </Declarations>

      <Code Language="csharp" Kind="" Delimiter="$">
        <![CDATA[
        $PropertyType$ _$PropertyName$;

        public $PropertyType$ $PropertyName$ {
            get {
                if (_$PropertyName$ == null)
                    _$PropertyName$ = new $PropertyType$();
                return _$PropertyName$;
            } set {
                _$PropertyName$ = value;
                this.OnPropertyChanged("$PropertyName$");
        }   }
        ]]>      
      </Code>

    </Snippet>
  </CodeSnippet>
</CodeSnippets>

1 个答案:

答案 0 :(得分:1)

很遗憾,您无法直接将PropertyName转换为propertyName。解决此问题的最佳方法是包含第三个文字来指定支持字段。这样可以防止当前文字中出现歧义,只会增加额外的几次击键次数。

声明块看起来像这样:

  <Declarations>
    <Literal Editable="true">
      <ID>PropertyType</ID>
      <Default>object</Default>          
    </Literal>

    <Literal Editable="true">
      <ID>PropertyName</ID>
      <Default>PropertyName</Default>
    </Literal>

    <Literal Editable="true">
      <ID>BackingPropertyField</ID>
      <Default>backingPropertyField</Default>
    </Literal>
  </Declarations>

代码块变为:

        

    public $PropertyType$ $PropertyName$ {
        get {
            if (_$BackingPropertyField$ == null)
                _$BackingPropertyField$ = new $PropertyType$();
            return _$BackingPropertyField$;
        } set {
            _$BackingPropertyField$ = value;
            this.OnPropertyChanged("$PropertyName$");
    }   }
    ]]>      
  </Code>

然后,您可以选中并指定所需的名称。