我正在尝试编写一个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>
有人可以帮忙吗?
答案 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来截取字段/属性设置器。