Why are static indexers disallowed in C#? I see no reason why they should not be allowed and furthermore they could be very useful.
For example:
public static class ConfigurationManager { public object this[string name] { get => ConfigurationManager.getProperty(name); set => ConfigurationManager.editProperty(name, value); } /// <summary> /// This will write the value to the property. Will overwrite if the property is already there /// </summary> /// <param name='name'>Name of the property</param> /// <param name='value'>Value to be wrote (calls ToString)</param> public static void editProperty(string name, object value) { var ds = new DataSet(); var configFile = new FileStream('./config.xml', FileMode.OpenOrCreate); ds.ReadXml(configFile); if (ds.Tables['config'] == null) ds.Tables.Add('config'); var config = ds.Tables['config']; if (config.Rows[0] == null) config.Rows.Add(config.NewRow()); if (config.Columns[name] == null) config.Columns.Add(name); config.Rows[0][name] = value.ToString(); ds.WriteXml(configFile); configFile.Close(); } public static void addProperty(string name, object value) => ConfigurationManager.editProperty(name, value); public static object getProperty(string name) { var ds = new DataSet(); var configFile = new FileStream('./config.xml', FileMode.OpenOrCreate); ds.ReadXml(configFile); configFile.Close(); if (ds.Tables['config'] == null) return null; var config = ds.Tables['config']; if (config.Rows[0] == null) return null; if (config.Columns[name] == null) return null; return config.Rows[0][name]; } }
The above code would benefit greatly from a static indexer. However it won’t compile because static indexers are not allowed. Why is this so?
Indexer notation requires a reference to
this. Since static methods don’t have a reference to any particular instance of the class, you can’t usethiswith them, and consequently you can’t use indexer notation on static methods.The solution to your problem is using a singleton pattern as follows:
Now you can call
Utilities.ConfigurationManager['someKey']using indexer notation.