Могу ли я проверить, допустим ли спецификатор формата для данного типа данных? - PullRequest
4 голосов
/ 10 декабря 2010

Если у меня есть (в .NET / C #), например, переменная типа long, я могу преобразовать ее в форматированную строку, например:

long value = 12345;
string formattedValue = value.ToString("D10"); // returns "0000012345"

Если я укажу формат, который не являетсядопустимо для этого типа, я получаю исключение:

long value = 12345;
string formattedValue = value.ToString("Q10"); // throws a System.FormatException

Вопрос: Есть ли способ проверить, допустим ли спецификатор формата (кроме попыток форматирования и перехвата исключения), прежде чем применить этот формат, что-токак long.IsFormatValid("Q10")?

Спасибо за помощь!

Ответы [ 2 ]

3 голосов
/ 10 декабря 2010

Я не пробовал это, но я думаю, вы могли бы создать метод расширения, такой как:

namespace ExtensionMethods
{
    public static class MyExtensions
    {

        public static bool IsFormatValid<T>(this T target, string Format)
            where T : IFormattable
        {
            try
            {
                target.ToString(Format, null);
            }
            catch
            {
                return false;
            }  
            return true;
        }
    }
}

, который вы могли бы затем применить таким образом:

long value = 12345;
if (value.IsFormatValid("Q0")) 
{
    ...
2 голосов
/ 10 декабря 2010

Вместо того, чтобы создавать проверку для этого, я бы предположил, что было бы лучше, если бы разработчики прочитали документацию , чтобы узнать, что и где разрешено.

Однако, если есть проблема с большим количеством опечаток, я полагаю, вы могли бы написать справочную таблицу из информации на этой странице. Хотя это может просто дать вам ложное чувство безопасности, так как вы получите людей, допускающих ошибки между допустимыми спецификаторами формата (пишите f, но они означают e и т. Д.).

Отредактировано для удаления запутанного бита в TryParse / Parse.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...