Pourquoi les indexeurs statiques ne sont-ils pas autorisés en C#? Je ne vois aucune raison pour laquelle ils ne devraient pas être autorisés et de plus ils pourraient être très utiles.Indexeurs statiques?
Par exemple:
static class ConfigurationManager {
public object this[string name]{
get{
return 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) {
DataSet ds = new DataSet();
FileStream configFile = new FileStream("./config.xml", FileMode.OpenOrCreate);
ds.ReadXml(configFile);
if (ds.Tables["config"] == null) {
ds.Tables.Add("config");
}
DataTable 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) {
DataSet ds = new DataSet();
FileStream configFile = new FileStream("./config.xml", FileMode.OpenOrCreate);
ds.ReadXml(configFile);
configFile.Close();
if (ds.Tables["config"] == null) {
return null;
}
DataTable config = ds.Tables["config"];
if (config.Rows[0] == null) {
return null;
}
if (config.Columns[name] == null) {
return null;
}
return config.Rows[0][name];
}
}
Le code ci-dessus bénéficierait grandement d'un indexeur statique. Cependant, il ne compilera pas car les indexeurs statiques ne sont pas autorisés. Pourquoi cela est-il ainsi?
Ensuite, je veux l'implémentation directe IEnumerable sur la classe statique, donc je peux faire 'foreach (var enum enum)' :) – nawfal