【问题标题】:how to write if null surround-with code snippet如何编写 if null 环绕代码片段
【发布时间】:2010-10-20 19:19:53
【问题描述】:

我正在尝试编写一个 vs 代码 sn-p,它将获取所选内容并用 if null 检查包围它,即

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>

谁能帮忙?

【问题讨论】:

    标签: c# visual-studio code-snippets


    【解决方案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 来拦截字段/属性设置器。

    【讨论】:

    • v.很好 - 我以前从未使用过宏。我添加了一个 WrapInBrackets 函数来通过 stylecop: Function WrapInBrackets(ByVal var, ByVal selected) Dim res As String res = String.Format("if ({0} == null)", var) res = res & vbCrLf & "{" res = res & vbCrLf & 选定 res = res & vbCrLf & "}" WrapInBrackets = res 结束函数
    【解决方案2】:

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

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

    或者在setter之外使用同样的??操作符:

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

    【讨论】:

    • 不错的方法,我忘记了??操作员。但是我不能将逻辑移动到设置器,因为 accgrp 是实体框架中的一个实体。对于实体上的每个属性,我需要设置用户未输入任何值的默认值。我知道 ef 设计器中有一个 defaultvalue 属性,但它不能使用函数。你的第二个建议很酷,但仍然无法在 sn-p 中使用 $selected$ 两次
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多