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に直接変換することはできません。これを実行する最良の方法は、バッキングフィールドを指定するための3番目のリテラルを含めることです。これにより、現在のリテラルのあいまいさが防止され、追加のキーストロークが2つだけ追加されます。

Declarationsブロックは次のようになります。

  <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 に答える