Учитывая строку составного формата, предоставленную пользователем (для использования с String.Format
), и набор типов, представляющих аргументы, которые будут использоваться для форматирования строки составного формата, как вы можете проверить, что предоставленное пользователем значение действительный
Должно быть довольно легко создать регулярное выражение, чтобы проверить, что общий синтаксис заполнителей аргументов соответствует "{index[,alignment][:formatString]}
" для документации . И не намного сложнее проверить, что индексы заполнителей в строке составного формата меньше, чем фактическое число типизированных аргументов (т.е. они не ссылаются на аргумент, который не будет задан). Однако, учитывая, что типы для аргументов, которые будут переданы, известны, также должна быть возможность проверить, что «:formatString
» подходит для этих типов.
Например, вы хотите проверить, что пользователь не указывает «{0:dddd MMMM}
» в качестве строки формата, когда первый тип аргумента (индекс 0) - это число (String.Format("{0:dddd MMMM}", 1234)
возвращает «dddd MMMM
»). Количество опций ":formatString
" по типу слишком велико , чтобы захотеть все вручную проверить. Есть ли другой путь? Или вам просто нужно жить с пользователем, который может указывать неверный формат строки?
Предположим, что здесь нет пользовательских реализаций IFormatProvider
, ICustomFormatter
или IFormattable
. Просто базовые типы уже в .NET Framework. Бонусные баллы за решение нестандартных задач.