Warum sind statische Indexer in C# nicht zulässig? Ich sehe keinen Grund, warum sie nicht erlaubt sein sollten und außerdem könnten sie sehr nützlich sein.Statische Indexer?
Zum Beispiel:
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];
}
}
Der obige Code würde stark von einer statischen Indexer profitieren. Es wird jedoch nicht kompiliert, da statische Indexer nicht erlaubt sind. Warum ist das so?
Nächste Ich möchte direkte IEnumerable-Implementierung auf statische Klasse, so kann ich tun 'foreach (var enum in Enum)' :) – nawfal