Re[13]: Проект утилитной библиотечки
От: Sinix  
Дата: 18.03.16 08:40
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Можно, если поподробнее опишешь.


Ну сценарий простой:
    public static class InvariantString
    {
        public static CultureInfo Culture => CultureInfo.InvariantCulture;

        public static string ToInvariantString<T>(this T s) where T : IFormattable => s.ToString(null, Culture);
        public static string ToInvariantString<T>(this T s, string format) where T : IFormattable => s.ToString(format, Culture);
        // ...
        public static double ParseDouble(string s) => double.Parse(s, Culture);
    }


    public class Program
    {
        static void Main(string[] args)
        {
            Right();
            Wrong();
        }

        private static void Wrong()
        {
            Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
            var x = 12.3.ToString();
            // ...
            Thread.CurrentThread.CurrentCulture = new CultureInfo("ru-RU");
            double y = double.Parse(x); // FAIL

            Console.WriteLine(y);
        }
        private static void Right()
        {
            Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
            var x = 12.3.ToInvariantString();
            // ...
            Thread.CurrentThread.CurrentCulture = new CultureInfo("ru-RU");
            double y = InvariantString.ParseDouble(x); // OK

            Console.WriteLine(y);
        }
    }

В реальности разумеется CurrentCulture может поменять что угодно — от перекидывания в другой поток и до чтения на другой машине.

В InvariantString дублируем основные методы из String, вызываем c InvariantCulture. Смысл в том, чтоб не путаться с текущей культурой.
Кто с ходу назовёт хотя бы пару методов, в которых используется culture-insensitive?
  Спойлеры!
.Contains()
.Replace()
.Equals()

дальше сами

В пару этому классу я делал UserString, с CurrentCulture по умолчанию, но насколько он нужен в итоге — сам сомневаюсь
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.