Ленивая инициализация для метода - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть класс с двумя приватными списками (изначально пустыми) и методом Search, который выполняет поиск в этих списках. Я хочу, чтобы списки были инициализированы только один раз и потокобезопасны. Есть ли какая-либо конструкция в .NET, подобная Lazy<T> для этого сценария? Я могу поставить Init() в замок и иметь некоторый флаг, чтобы избежать повторной инициализации, или иметь Lazy<List<int>> для списков. Логика заполнения списков сложна, поэтому для каждого не может быть отдельного метода

public class Myclass
{
    private static List<int> list1;
    private static List<int> list2;

    static bool init=false;
    private static object locker=new object();
    private static void Init()
    {
         lock(locker)
         {
           if(init)
             return;
            // fill list1,
            //fill list 2
            init=true;
         }
    }

    public static void Search(string query)
    {
        if(!init)
            Init();

        for(int i = 0; i < list1.Count; i++)
        {
            for(int j = 0; j < list2.Count; j++)
            {
                //
            }
        }
    }
}
...