Jus*_* R. 8 c# properties lazy-initialization
我有一个属性为Dictionary的类:
public class Entity
{
public Dictionary<string, string> Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想切换此属性以使用延迟初始化.我尝试了以下方法:
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这当然是一个错误,因为名称和名称有不同的类型.但是对于我的生活,我无法弄清楚如何正确指定.我真正想要的是让Name保持为null,直到我访问它,然后在第一次读或写时创建它.
dee*_*see 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;
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:请注意,此方法将有一些线程安全问题.检查这是否对您有用.
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7048 次 |
| 最近记录: |