StringTemplate C# elseif 错误?

StringTemplate C# elseif bug?

我使用 StringTemplate 版本 3

我有以下模板:

<html>
  <head>
    <title>Test</title>
    <style>
        .done-ok {          
            background-color    : LawnGreen         
        }
        .done-ignore {                
            background-color    : Orange         
        }
        .done-fail {                
            background-color    : OrangeRed         
        }           
    </style>
  </head>
  <body class="$if(failedNonEmpty)$done-fail$elseif(needsAttentionNonEmpty)$done-ignore$else$done-ok$endif$">
  </body>
</html>

我使用以下代码:

    var stg = new StringTemplateGroup(templateName, new FileSystemTemplateLoader(Path.Combine(locationRoot, templateFolder)));
    var st = stg.GetInstanceOf(templateName);

    st.SetAttribute("passedNonEmpty", !true);
    st.SetAttribute("failedNonEmpty", !true);
    st.SetAttribute("needsAttentionNonEmpty", !true);

    var content = st.ToString();

当我编译代码时一切正常。奇怪的是当我将第二个属性更改为:

st.SetAttribute("failedNonEmpty", true);

然后我突然在 st.ToString() 行得到异常说: 模板中没有文字'elseif'

有人遇到同样的问题或知道解决方案吗?

据我所知,ST3 中没有 elseif(这真的很让人头疼)。 不过ST4有。

编辑:

实际上elseif是在3.1中添加的(不确定是否有效)

来源: https://theantlrguy.atlassian.net/wiki/display/ST/3.1+Release+Notes