#c_sharp
Есть строка, в которой я заменяю значения.
Допустим, string str = "${1} ${2} ${3}"
Для замены на слова использую
if (str.Contains("${1}")) str = str.Replace("${1}", "один");
Однако, иногда встречаются такие замены, на которые нужен объект, который собирает
нужную инфу. На это у него уходит большое кол-во времени.
QQ qq = getQQ();
if (str.Contains("${2}")) str = str.Replace("${2}", qq.first);
if (str.Contains("${3}")) str = str.Replace("${3}", qq.second);
Соответственно, если такие замены не требуются, то и создавать и тратить время на
объект qq не нужно.
Например, при работе приложения, какая-нибудь переменная типа int i = 1 не будет
создана до тех пор, пока не понадобится в работе.
А можно сказать компилятору "молодой компилятор, не задействуй строку QQ qq = getQQ();
пока она не понадобится", или что-то типа того?
Ответы
Ответ 1
(После дискуссии в комментариях изменил ответ) Если создание объекта дорогое, вам нужно использовать ленивую инициализацию. Проще всего получить её при помощи класса Lazy: var lazyqq = new Lazy (getQQ, isThreadSafe: false); if (str.Contains("${2}")) str = str.Replace("${2}", lazyqq.Value.first); if (str.Contains("${3}")) str = str.Replace("${3}", lazyqq.Value.second); Объект будет создан при первом его использовании. Если в функцию нужно передать параметры, проще всего оформить это при помощи замыкания: var lazyqq = new Lazy (() => getQQ(x, y, z), isThreadSafe: false);
Комментариев нет:
Отправить комментарий