【问题标题】:Can you include condition-checking code in a format string?您可以在格式字符串中包含条件检查代码吗?
【发布时间】:2009-04-07 21:10:14
【问题描述】:

我有一个自定义控件,它是列表的一部分。它应该显示的文本是通过为其 Text 属性分配一个值来设置的。在运行时,此文本从数据库中加载。我想在这个文本前面加上字符串“Toelichting:”(荷兰语的“解释”)。我可以通过将控件的 FormatString 属性设置为以下内容来完成此操作:

"Toelichting: {0}"

现在,如果加载的文本是一个空字符串,我想显示“Toelichting: –”,所以在末尾加上一个破折号。否则,我想显示“Toelichting:MyText”。是否可以在 FormatString 中添加一些条件检查代码,以便我可以检查参数是否不为空?

【问题讨论】:

    标签: c# .net compact-framework


    【解决方案1】:

    为什么不只是这个?

    string.Format("Toelichting: {0}", string.IsNullOrEmpty(explanation) ? "–" : explanation);
    

    我认为没有办法将它嵌入到格式字符串中。

    【讨论】:

    • 我不能这样做,因为我无法控制文本到控件的实际分配,因为它是更复杂的复合控件的一部分。这就是为什么我试图在 FormatString 中嵌入这个逻辑。
    • 啊。在这种情况下,恐怕您在检索数据时需要用短划线替换空字符串。对不起。
    【解决方案2】:

    不,没有办法做到这一点。

    【讨论】:

    • 不幸的是,这是对我的问题的最简洁和正确的答案。其他建议将是很好的解决方法,但不幸的是,它们对我来说不是选择。
    • 如果您可以选择绑定到字符串以外的类型,那么您可以覆盖该类型的 ToString() 方法来执行您想要的操作。如果你能把你的字符串包装成这样的类型,那就行了。
    【解决方案3】:

    你可以这样做:

    String.Format("Toelichting: {0}", 
        (String.IsNullOrEmpty(yourstr)) ? "-" : yourstr);
    

    并不完美,但它相对紧凑且可读。

    【讨论】:

    • 我不能这样做,因为我无法控制将文本实际分配给控件,因为它是更复杂的复合控件的一部分。这就是为什么我试图在 FormatString 中嵌入这个逻辑。
    【解决方案4】:

    如果你经常做这种事情,那么考虑编写自己的格式化程序,这样你就可以编写这样的代码......

    foo = string.Format(new MyFormatter(), "Toelichting: {0:explanation}", bar);

    MyFormatter 将实现 IFormatProvider 和 ICustomFormatter。

    看看这个...

    .NET: Is there a String.Format form for inserting the value of an object property into a string?

    ...这可能比您需要的更复杂(因为它处理反射并适用于任何对象)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-04
      • 2021-10-30
      • 2014-09-17
      • 1970-01-01
      • 2021-02-19
      • 1970-01-01
      相关资源
      最近更新 更多