Как установить CurrencySymbol в культуреInfo.NumberFormat только для чтения?

Я пытаюсь отформатировать валюту (швейцарский франк -- de-CH) с символом (CHF), который отличается от культуры .Net по умолчанию (SFr.). Проблема в том, что NumberFormat для культуры доступен только для чтения.

Есть ли простой способ решить эту проблему с помощью CultureInfo и NumberFormat? Есть ли способ переопределить CurrencySymbol?

Пример:

Dim newCInfo As CultureInfo = CultureInfo.GetCultureInfo(2055)
newCInfo.NumberFormat.CurrencySymbol = "CHF"
MyCurrencyText.Text = x.ToString("c",newCInfo)

Это приведет к ошибке при установке NumberFormat.CurrencySymbol, потому что NumberFormat равно **ReadOnly**.

Спасибо!


person sugarcrum    schedule 04.06.2009    source источник


Ответы (1)


Вызовите Clone на CultureInfo, что создаст изменяемую версию, затем установите символ валюты.

Вы могли бы быть более конкретным: получить NumberFormatInfo и клонировать только его. Это немного более элегантно, ИМО, если вам не нужно что-то еще менять в культуре.

Пример на С#:

using System;

using System.Globalization;

class Test
{
    static void Main()
    {
        CultureInfo original = CultureInfo.GetCultureInfo(2055);
        NumberFormatInfo mutableNfi = (NumberFormatInfo) original.NumberFormat.Clone();
        mutableNfi.CurrencySymbol = "X";
        Console.WriteLine(50.ToString("C", mutableNfi));
    }
}
person Jon Skeet    schedule 04.06.2009
comment
Красиво и просто просто. Я мог бы корить себя за то, что пропустил это. Спасибо! - person sugarcrum; 04.06.2009