how to make accessor for Dictionary in a way that returned Dictionary cannot be changed C# / 2.0

Posted by matti on Stack Overflow See other posts from Stack Overflow or by matti
Published on 2010-04-07T09:47:30Z Indexed on 2010/04/07 10:33 UTC
Read the original article Hit count: 239

I thought of solution below because the collection is very very small. But what if it was big?

private Dictionary<string, OfTable> _folderData = new Dictionary<string, OfTable>();

public Dictionary<string, OfTable> FolderData
{
    get { return new Dictionary<string,OfTable>(_folderData); }
}

With List you can make:

public class MyClass
{
    private List<int> _items = new List<int>();

    public IList<int> Items
    {
        get { return _items.AsReadOnly(); }
    }
}

That would be nice!

Thanks in advance, Cheers & BR - Matti

NOW WHEN I THINK THE OBJECTS IN COLLECTION ARE IN HEAP. SO MY SOLUTION DOES NOT PREVENT THE CALLER TO MODIFY THEM!!! CAUSE BOTH Dictionary s CONTAIN REFERENCES TO SAME OBJECT. DOES THIS APPLY TO List EXAMPLE ABOVE?

class OfTable
{
    private string _wTableName;
    private int _table;
    private List<int> _classes;
    private string _label;

    public OfTable()
    {
        _classes = new List<int>();
    }

    public int Table
    {
        get { return _table; }
        set { _table = value; }
    }

    public List<int> Classes
    {
        get { return _classes; }
        set { _classes = value; }
    }

    public string Label
    {
        get { return _label; }
        set { _label = value; }
    }
}

so how to make this immutable??

© Stack Overflow or respective owner

Related posts about c#

Related posts about generics