Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 方法的惰性初始化_C#_.net_Thread Safety - Fatal编程技术网

C# 方法的惰性初始化

C# 方法的惰性初始化,c#,.net,thread-safety,C#,.net,Thread Safety,我有一个类,有两个私有列表(最初为空)和一个Search方法,该方法在这些列表中执行一些搜索。我希望列表只初始化一次并且线程安全。 对于这个场景,.NET中是否有类似于Lazy的构造?我可以将Init()放在锁中,并设置一些标志以避免重复初始化,或者为列表设置Lazy。 填充列表的逻辑很复杂,因此不能为每个列表都提供单独的方法 公共类Myclass { 私有静态列表列表1; 私有静态列表列表2; 静态bool init=false; 私有静态对象锁定器=新对象(); 私有静态void Init(

我有一个类,有两个私有列表(最初为空)和一个
Search
方法,该方法在这些列表中执行一些搜索。我希望列表只初始化一次并且线程安全。 对于这个场景,.NET中是否有类似于
Lazy
的构造?我可以将
Init()
放在锁中,并设置一些标志以避免重复初始化,或者为列表设置
Lazy
。 填充列表的逻辑很复杂,因此不能为每个列表都提供单独的方法

公共类Myclass
{
私有静态列表列表1;
私有静态列表列表2;
静态bool init=false;
私有静态对象锁定器=新对象();
私有静态void Init()
{
锁(储物柜)
{
if(init)
返回;
//填写清单1,
//填写清单2
init=真;
}
}
公共静态无效搜索(字符串查询)
{
if(!init)
Init();
for(int i=0;i
您已经提到了
Lazy
。那不符合你的要求吗?如果不是,为什么?将所有应该是惰性的东西封装在一个类中,并将该类的一个实例用于
lazy
。是否需要MyClass的多个实例?如果没有,您可以使用一个线程安全的单例模式,如所述,使用lazy。private static readonly List list1=new List()有什么问题吗我不知道?有什么理由不使用静态构造函数并在那里进行初始化吗?我真的觉得事情可能越来越复杂了。据我所知,在执行对静态方法的任何调用之前,dotnet已经确保构造函数已运行。