Модернизация метода Replace() для строки

255
24 апреля 2017, 01:23

есть строка с текстом вида "D15 D7 B12 String..." как привести к нормальному виду так что бы не прописывать миллион Replace();

Replace("D1", "1").Replace("D22", "22").Replace("String", "Новая Строка").Replace("Enter","С новой строки");

можно ли как то занести в массивы или перечисления все приходящие значения и все отредактированные а потом просто в цикле заменять первые на вторые?

Answer 1

Например, передавать коллекцию классов.

public static class StringExt
{
    public static string Replace(this string str, IEnumerable<ReplaceItem> items)
    {
        foreach (var item in items)
            str = str.Replace(item.Old, item.New);
        return str;
    }
}
public class ReplaceItem
{
    public string Old { get; set; }
    public string New { get; set; }
}

Использование:

"asfasf".Replace(new[] { new ReplaceItem { Old = "old1", New = "new1" },
                         new ReplaceItem { Old = "old2", New = "new2" }});
Answer 2

Попробуй посмотреть в сторону расширений и ключевого слова params. Что то вроде:

public static class StringExtensions
{
    public static string Replace(this String str, params string[] args)
    {
        string result = str;
        for(int i=0; i<args.Length-1; i+2){
            result = result.Replace(args[i], args[i+1]); 
        }
        return result;
    }
}   

Обязательно сделай все необходимые проверки на четность и наличие аргументов.

Answer 3

Вот такое решение с использованием словаря отлично работает. Кому интересно что б не писать портянку из replace

        Dictionary<string, string> RusDict = new Dictionary<string,string>();
        RusDict.Add("command","новая команда ");
        RusDict.Add("delete","удалить");
        //==============//
      var value = string.Empty;
      foreach (var keys in RusDict.Keys)
      {
            RusDict.TryGetValue(keys, out value);
            if (RusDict.ContainsKey(textBox2.Text))
            {
                if (textBox2.Text == keys)
                {
                    textBox2.Text = value;
                }
              }
            }
        if (!RusDict.ContainsKey(_key))
        {
            textBox2.Text = "Нет значения в словаре";
        }

тему можно считать закрытой.

READ ALSO
Вычесление скорости загрузки файла cSharp WebClient

Вычесление скорости загрузки файла cSharp WebClient

Как измерить скорость загрузки файла при использовании webClientDownloadFileTaskAsync? Предчувствую сильную зависимость вычислений от загруженности...

281
Прокрутка слайдера WPF. XAML Binding С#

Прокрутка слайдера WPF. XAML Binding С#

Привязываю значение слайдера к позиции видео в медиаэлементеКак бы привязка верно сделана но не работате

437
Движение шарика арканоид - C#

Движение шарика арканоид - C#

Добрый день, пишу арканоид, как учебную программу, столкнулся с такой проблемой, как сделать движение шарика? как можно прописать вектор движения?...

498