I have a class with a property that's a Dictionary:
public class Entity 
{
        public Dictionary<string, string> Name { get; set; }
}
I would like switch this property to use lazy initializtion. I tried the following:
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;
            }
        }
}
This is of course an error, as Name and name have different types. For the life of me though, I can't figure out how to specify this correctly. All I really want is to have Name remain null until I access it, then create it on the first read or write.
You can use the initialization with Lazy, but what you want is pretty simple and you could simply do this
    private Dictionary<string, string> _name;
    public Dictionary<string, string> Name
    {
        get
        {
            if(_name == null)
                _name = new Dictionary<string, string>();
            return _name;
        }
        set
        {
            _name = value;
        }
    }
EDIT: Note that this approach will have some thread safety issues. Check if this can be a problem for you.
get { return _name ?? (_name = new Dictionary<string, string>()); }drch 2012-04-04 02:03
name.Value is read-only. Try this:
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;
        }
    }
}