如果使用null surround-with code snippet,如何编写

时间:2009-04-21 11:32:52

标签: c# visual-studio code-snippets

我正在尝试编写一个vs代码片段,它将选择并使用if null检查将其包围,即

accgrp.CREATEDATE = DateTime.Now;

将成为:

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

我已经达到了以下目的。 $ selected $ only似乎在最后一次使用时工作,如果多次使用,你希望看到所选代码的其他实例是空白的。我理解下面的代码不会完全符合我的要求,因为我不会得到任务的右侧,btu它就足够了。

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

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

假设CREATEDATE是一个属性,为什么不在那里移动这个逻辑呢?

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

或在setter外使用相同的??运算符:

accgrp.CREATEDATE = accgrp.CREATEDATE ?? DateTime.Now;

答案 1 :(得分: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来截取字段/属性设置器。