3

我想进一步描述枚举值。因此,如果应提供描述,我将向名为Description的枚举属性添加自定义标记值。目标是在代码生成期间向标记枚举属性添加自定义 C# 属性,但前提是存在这样的标记值。因此我需要编辑Attribute Declaration的代码生成模板。目前它使用:

$hasDescription = %attTag:"Description" ? "true" : "false"%
%if $hasDescription == "true"%
[Description(%qt%%attTag:"Description"%%qt%)]
%endIf%

这给了我想要的输出。但是如果值中有引号,它会破坏输出代码文件。它不会编译。因此,我需要替换/转义Tagged Value的 value 字段中的所有引号。我尝试了以下(各种组合):

%REPLACE(attTag:"Description", "\"", "\\\"")%
%REPLACE(attTag:"Description", """", "\\""")%
%REPLACE(attTag:"Description", "%qt%", "%sl%%qt%")%
%REPLACE(attTag:"Description", %qt%, %sl%%qt%)%

注: %qt%用于插入"%sl%用于插入\参考

它们都不起作用。要么将字符串按原样插入到生成的代码文件中,要么Tagged Value的值中的引号不会发生任何事情。

那么有没有办法转义这些字符以便能够在代码模板中的字符串中替换它们?


使用 Enterprise Architect 13.5.1351

在SE 软件工程上首先提出的问题

4

1 回答 1

1

我查看了提供的其他模板,经过一番折腾终于找到了解决方案。该宏将引号中的一些文本或变量作为参数。由于直接在REPLACE宏中使用转义序列不起作用,我尝试事先将它们分配给变量:

$qt = %qt%
$escape = %sl% + %qt%
$description = %REPLACE(attTag:"Description", $qt, $escape)%

而已。终于奏效了。+在第二行添加中间%sl%和之间很重要%qt%,即使Code Template Syntax > Literal Text上的文档另有说明。$escape = %sl%%qt%不起作用,因为它只给我一个\没有".

该变量$description不是必需的,但为了便于阅读而添加。

于 2018-04-24T14:12:32.823 回答