我有一个具有字典属性的类:
public class Entity
{
public Dictionary<string, string> Name { 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;
}
}
}
这当然是一个错误,因为名称和名称有不同的类型。但是对于我的生活,我无法弄清楚如何正确指定。我真正想要的是让Name保持为null,直到我访问它,然后在第一次读或写时创建它。
答案 0 :(得分:10)
您可以使用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;
}
}
编辑:请注意,此方法会有一些线程安全问题。检查这是否对您有用。
答案 1 :(得分:7)
name.Value
是只读的。试试这个:
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;
}
}
}