Search code examples
c#propertiesencapsulation

C# prevent dictionary property elements from being set outside class?


Title says it all. Reducing access through access modifiers only prevents reinitialising the property; It doesn't prevent elements from becoming global state (bad practice). I know there's a workaround with List<T>'s but what should I do for any other indexed collection?

public class Start
{
    public static void main()
    {
        //CODE SMELL AHEAD
        AttendanceManager.MuteStatuses[0] = new KeyValuePair <string, string> ("", ""); 
    }
}

public static class AttendanceManager
{ 
    public static HybridDictionary MuteStatuses
    {
        get
        {
            playersMuteStatuses.Add ("", "");
            return playersMuteStatus;
        }
    }      
    private static HybridDictionary playersMuteStatus = new HybridDictionary();
}

Solution

  • Dont use HybridDictionary. We do have IReadOnlyDictionary<T>

    private Dictionary<string, string> playersMuteStatus = new... ;
    public IReadOnlyDictionary<string, string> MuteStatuses
    {
        get
        {
            return playersMuteStatus as IReadOnlyDictionary<string, string>;
        }
    }