Static Indexers?
.net, c#, indexer, static, static-indexers
Solution
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 use `this` with them, and consequently you can't use indexer notation on static methods.
The solution to your problem is using a singleton pattern as follows:
public class Utilities
{
private static ConfigurationManager _configurationManager = new ConfigurationManager();
public static ConfigurationManager ConfigurationManager => _configurationManager;
}
public class ConfigurationManager
{
public object this[string value]
{
get => new object();
set => // set something
}
}
Now you can call `Utilities.ConfigurationManager["someKey"]` using indexer notation.
Problem
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?