#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);
Комментариев нет:
Отправить комментарий