¿Por qué los indexadores estáticos no se permiten en C#? No veo ninguna razón por la cual no se les permita y, además, podrían ser muy útiles.Indicadores estáticos?
Por ejemplo:
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];
}
}
El código anterior se beneficiaría enormemente de un indizador de estática. Sin embargo, no se compilará porque los indexadores estáticos no están permitidos. ¿Por qué esto es tan?
Siguiente Quiero implementación directa de IEnumerable en la clase estática, así que puedo hacer 'foreach (var enum en Enum)' :) – nawfal