C# C语言中的惰性字典属性#
我有一个属性为字典的类:C# C语言中的惰性字典属性#,c#,properties,lazy-initialization,C#,Properties,Lazy Initialization,我有一个属性为字典的类: public class Entity { public Dictionary<string, string> Name { get; set; } } 公共类实体 { 公共词典名称{get;set;} } 我想将此属性切换为使用惰性初始化。我尝试了以下方法: public class Entity { private Lazy<Dictionary<string, string>> name
public class Entity
{
public Dictionary<string, string> Name { get; set; }
}
公共类实体
{
公共词典名称{get;set;}
}
我想将此属性切换为使用惰性初始化。我尝试了以下方法:
public class Entity
{
private Lazy<Dictionary<string, string>> name = new Lazy<Dictionary<string, string>>(() => new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase));
public Dictionary<string, string> Name
{
get
{
return name;
}
set
{
name = value;
}
}
}
公共类实体
{
private Lazy name=new Lazy(()=>newdictionary(StringComparer.OrdinalIgnoreCase));
公共字典名
{
得到
{
返回名称;
}
设置
{
名称=值;
}
}
}
这当然是一个错误,因为Name和Name有不同的类型。然而,就我的一生而言,我不知道如何正确地指定这一点。我真正想要的是让Name保持为null,直到我访问它,然后在第一次读写时创建它 您可以将初始化与
Lazy
一起使用,但您需要的是非常简单的,您可以简单地执行此操作
private Dictionary<string, string> _name;
public Dictionary<string, string> Name
{
get
{
if(_name == null)
_name = new Dictionary<string, string>();
return _name;
}
set
{
_name = value;
}
}
private Dictionary\u name;
公共字典名
{
得到
{
如果(_name==null)
_name=新字典();
返回_name;
}
设置
{
_名称=值;
}
}
编辑:注意,这种方法会有一些线程安全问题。检查这是否是您的问题。
名称。值为只读。试试这个:
public class Entity
{
private Lazy<Dictionary<string, string>> name =
new Lazy<Dictionary<string, string>>(
() => new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase));
public Dictionary<string, string> Name
{
get
{
return name.Value;
}
}
}
公共类实体
{
私有名称=
新懒汉(
()=>新字典(StringComparer.OrdinalIgnoreCase));
公共字典名
{
得到
{
返回name.Value;
}
}
}
这里有一个竞赛条件。是的,我添加了一个关于这一点的注释,可能是在你输入评论时添加的。;)哦,看起来我在用我的手机。这就是当我迷恋一个很酷的功能时发生的事情。谢谢,我会尽快将此标记为答案,让我来回答。现在,因为我有一堆这样的东西,我只需要为它们做一些工厂。或者只是获取{return\u name??(\u name=new Dictionary());}
是的,这是一个很好的一行,但是有些人不喜欢在返回中指定。我猜你会失去一些可读性。Lazy.Value属性是只读的:如果你的意思是你的需求是读写属性,那么上面的解决方案是不完整的。[意识到这个问题已经8年了]与你所追求的类似?