如何在C#中针对其目标参数类型验证复合格式字符串?

iam*_*ael 4 c# validation string.format

给定用户提供的复合格式字符串(用于String.Format)和表示将用于格式化复合格式字符串的参数的一组类型,如何检查用户提供的值是否有效?

它应该是很容易地创建一个正则表达式来检查参数占位符的一般语法匹配" {index[,alignment][:formatString]}"每个文档.并且更难以验证复合格式字符串中占位符的索引是否小于实际的类型化参数数量(即它们不引用将不会给出的参数).但是,如果已知传入参数的类型,则还应该可以验证" :formatString"是否适合这些类型.

例如,{0:dddd MMMM}当第一个参数类型(0索引)是数字(String.Format("{0:dddd MMMM}", 1234)产生" dddd MMMM")时,您要验证用户未指定" "作为格式字符串.:formatString按类型的" "选项数量太大,无法手动检查所有内容.还有其他方法吗?或者您是否只需要与可能指定错误格式字符串的用户一起生活?

假设有没有自定义IFormatProvider,ICustomFormatterIFormattable实现在这里打球.只是.NET Framework中已有的基本类型.用于解决自定义内容的奖励积分.

Mar*_*ell 5

AFAIK没有内置的方法.

您可以手动编写每个常见案例,但我不推荐它.

(编辑)一个实用的选项可能是try/catch- 当用户输入格式时尽早测试格式....