【发布时间】:2021-02-18 03:31:15
【问题描述】:
.Net 包含一个wide range of built in formatters,用于在将对象转换为字符串时控制输出,例如ToString("N2")。如何测试给定的格式字符串是否真的有效?
如果我传递垃圾格式化程序ToString(...),那么输出似乎是该格式化程序的文字。例如(在我的en 语言环境中):
10.ToString("F"); // Outputs '10.00'
10.ToString("typo"); // Outputs 'typo'
我正试图发现格式已在我们的一个翻译中被覆盖(可能由非开发人员)并且格式被意外拼写错误的情况。
一个无效的格式化程序毫无例外地被允许通过似乎很奇怪,更奇怪的是,当这种情况发生时,无效的格式化程序被用作输出而不是回退到源对象。
【问题讨论】:
-
您将如何区分错误格式字符串与覆盖 ToString 的情况?
-
编写单元测试预期输出
-
谢谢@41686d6564 - 我在搜索时没有看到。验证列表的蛮力方法将涵盖我们需要的内容。虽然实现起来会相当冗长,因为我们不仅限于数字类型,而是所有内置函数。
-
它可能不是我们想要的,但
"typo"是一个有效的格式字符串。参见the docs about character literals,关于“所有其他字符...”的部分 -
@AndySavage 请注意,如果您只是不将格式化字符串放入本地化资源中,那么整个问题就会消失......在代码中保持格式化并在本地化字符串中仅使用非格式化
"The value is {0}"占位符。