2

選択したものを取り、それをif nullチェックで囲むvsコードスニペットを作成しようとしています。

accgrp.CREATEDATE = DateTime.Now;

となります:

if (accgrp.CREATEDATE == null)
        {
            accgrp.CREATEDATE = DateTime.Now;
        }

私は以下まで持っています。$selected$ は、最後に使用されたときにのみ機能するようです。複数回使用すると、選択したコードが表示されると予想される他のインスタンスは空白になります。割り当ての右側が得られないため、以下のコードは私が望んでいることを正確に実行しないことを理解していますが、それで十分です。

            <Declarations>
            <Literal>
                <ID>expression</ID>
                <ToolTip>Expression to evaluate</ToolTip>
                <Default>o</Default>
            </Literal>
        </Declarations>
        <Code Language="csharp"><![CDATA[if ($selected$ == null)
{
    $selected$ = $expression$$end$   
}]]>
        </Code>

誰でも助けることができますか?

4

2 に答える 2

1

がプロパティであると仮定するCREATEDATEと、このロジックをそこに移動してみませんか?

DateTime? CREATEDATE
{
    set { _createdate = value ?? DateTime.Now; }
}

??またはセッターの外で同じ演算子を使用します。

accgrp.CREATEDATE = accgrp.CREATEDATE ?? DateTime.Now;
于 2009-04-21T11:54:09.010 に答える
1

これは、同じ機能を提供するマクロです。

Sub NullCheck()
    Dim selected As String
    Dim var As String
    Dim res As String
    Dim sel As TextSelection


    sel = DTE.ActiveDocument.Selection
    selected = sel.Text        
    var = selected.Substring(0, selected.IndexOf("=") - 1).Trim()
    res = String.Format("if ({0} == null) {1} ", var, selected)

    sel.Delete()
    sel.Insert(res, vsInsertFlags.vsInsertFlagsContainNewText)
    sel.SmartFormat()

End Sub

別の方法 (コメントを読んだ後) は、フィールド/プロパティ セッターをインターセプトするためにPostSharpを使用することです。

于 2009-04-21T12:07:34.797 に答える