8

我有一个属性是字典的类:

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 => name;
        set => name = value;
    }
}

这当然是一个错误,因为 Name 和 name 有不同的类型。不过,对于我的一生,我无法弄清楚如何正确指定这一点。我真正想要的只是让 Name 在我访问它之前保持为空,然后在第一次读取或写入时创建它。

4

2 回答 2

12

您可以使用初始化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;
}

编辑:请注意,这种方法会有一些线程安全问题。检查这对您来说是否是个问题。

于 2012-04-03T23:34:15.343 回答
9

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 => name.Value;
}
于 2012-04-03T23:41:24.667 回答