Есть исходная строка, слова в которой необходимо заменять на результаты выполнения методов. Соответственно, если заменять нечего, то и метод выполнять не нужно.
Сейчас имею такой код:
if (str.Contains("${Time}")) str = str.Replace("${Time}", qq());
if (str.Contains("${Sec}")) str = str.Replace("${Sec}", ww());
if (str.Contains("${Min}")) str = str.Replace("${Min}", ee());
Но выглядит он неуклюже, особенно, когда таких замен 50. Каким образом можно сократить запись?
Мне будет достаточно того, что бы не нужно было писать "${Time}" дважды. И повторю, что если заменять нечего, то и метод выполнять не нужно.
Автор, я это имел ввиду:
public class Program
{
public static String FooReplace(String str, String oldValue, Func<string> fn)
{
if (str.Contains(oldValue))
{
str = str.Replace(oldValue, fn());
}
return str;
}
public static String ww()
{
return new string("World".Reverse().ToArray());
}
public static String ee()
{
return "123";
}
public static void Main(string[] args)
{
string text = "Hello World!";
Console.WriteLine(text);
Console.WriteLine();
text = FooReplace(text, "!", () => "!!!");
Console.WriteLine(text);
String world = "World";
text = FooReplace(text, "{world}", ww);
Console.WriteLine(text);
text = FooReplace(text, "Hel", ee);
Console.WriteLine(text);
}
}
Консоль:
Hello World!
Hello World!!!
Hello dlroW!!!
123lo dlroW!!!
PS. еще можно немного сократить код, если поместить значения и ссылки на функции в коллекцию (например в словарь), а после перебрать в цикле:
...
String world = "World";
var oldByNewValue = new Dictionary<string, Func<string>>
{
{"!", () => "!!!"},
{"{world}", ww},
{"Hel", ee},
};
foreach (KeyValuePair<string, Func<string>> kvp in oldByNewValue)
{
text = FooReplace(text, kvp.Key, kvp.Value);
Console.WriteLine(text);
}
...
В вашем коде Contains бессмысленный, достаточно только Replace. то есть если подстрока содержится, то она будет заменена, если не содержится, то и менять нечего, поэтому вам достаточно просто:
str = str
.Replace("${Time}", qq());
.Replace("${Sec}", ww());
.Replace("${Min}", ee());
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
На форме есть текстбокс, при добавлении в него символа, должен был добавляться спецсимвол, в моём случае "|", но у меня появляется ошибка:
Есть dll с кодом на C#, которая имеет очень много зависимостей, так что у меня не получится декопильнуть, переписать и закомпилить опять в dllКак...
Делаю базу данных для доставки цветов с возможностью самовывоза, возникла задача в отделении логики доставки от обработки заказовНа данный...