Форматирование строк в C # последовательно в большом веб-приложении - PullRequest
4 голосов
/ 17 ноября 2008

Я ищу последовательный способ структурирования моего использования форматирования строк в большом веб-приложении, и я ищу рекомендации или рекомендации, по которым идти.

До сих пор у меня был статический класс, который выполняет некоторое обычное форматирование, например,

Formatting.FormatCurrency

Formatting.FormatBookingReference

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

amount.ToString ( "с")

reference.ToString ( "000000")

Я бы использовал IFormattable и ICustomFormatter для некоторых из наших более сложных структур данных, но я пытаюсь понять, что делать с более простыми существующими объектами, которые нам нужно форматировать (в данном случае Int32, но также DateTime).

Должен ли я просто определить константы для "c" и "000000" и использовать их последовательно во всем веб-приложении или есть более стандартный способ сделать это?

Ответы [ 3 ]

12 голосов
/ 17 ноября 2008

Один из вариантов - использовать вспомогательный класс с методами расширения, такими как

public static class MyWebAppExtensions
{
    public static string FormatCurrency(this decimal d)
    {
        return d.ToString("c");
    }
}

Тогда в любом месте у вас есть десятичное значение, которое вы делаете

Decimal d = 100.25;
string s = d.FormatCurrency();
5 голосов
/ 17 ноября 2008

Я согласен с предложением GeekyMonkey, с одним изменением:

Форматирование - это деталь реализации. Я бы предложил ToCurrencyString придерживаться соглашения To * и его намерений.

2 голосов
/ 17 ноября 2008

Этот ответ можно объединить с ответом GeekyMonkey.

Прежде всего, в ASP.NET у вас есть возможность установить культуру и культуру пользовательского интерфейса в web.config, используя элемент globalization. Атрибут resourceProviderFactoryType - ваш друг, если у вас есть особые потребности в форматировании.

Другая возможность - создать подкласс класса страницы ASP.NET и переопределить метод InitializeCulture. Здесь вы можете изменить культуру и культуру пользовательского интерфейса, которые хранятся в текущем потоке, обрабатывающем HTTP-запрос.

Быстрый пример:

protected override void InitializeCulture()
{
    Thread.CurrentThread.CurrentCulture = ...;
    Thread.CurrentThread.CurrentUICulture = ...;

    Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern = "dd-MM-yyyy";
    ...
}

Для тех, кто обеспокоен тем, что ASP.NET делает «случайное» переключение потоков:

ASP.NET гарантирует, что даже если они переключают ваш поток, свойства CurrentPrincipal и culture из исходного потока переносятся в новый поток. Это происходит автоматически, и вам не нужно беспокоиться о потере этих значений. Уф!

Источник: Переключение потоков ASP.NET

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