1

可能重复:
格式化 C# 代码片段的文字参数

编辑:这可以关闭。找到一个完全相同的副本,似乎没有解决方案。=(

完全重复: 格式化 C# 代码片段的文字参数

编写代码片段时有什么方法可以解析替换文字吗?我想做类似以下的事情:

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

用户将 PropertyName 替换为“MyProperty”,结果如下:

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>
4

1 回答 1

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>

然后,您可以直接浏览并指定所需的名称。

于 2012-11-27T16:48:58.673 回答