ConfigurationElementCollection und Linq
Ich geschrieben habe, einige benutzerdefinierte Konfiguration Sammlungen, Elemente usw. Nun, ich würde gerne eine einfache Linq-Anweisung:
ServerDetails servers = ConfigurationManager.GetSection("serverDetails") as ServerDetails;
var server = from s in servers
where s.Name == serverName
select s;
Bekomme ich die Fehlermeldung:
Konnte nicht finden, eine Implementierung des query-pattern für die source-Typ
'MyNamespace.ServerDetails'. 'Wo' nicht gefunden.
Den ServerElement
hat zwei Eigenschaften:
public class ServerElement : ConfigurationElement
{
[ConfigurationProperty("ip")]
public string IP
{
get { return (string)base["ip"]; }
set { base["ip"] = value; }
}
[ConfigurationProperty("name", IsKey = true, IsRequired = true)]
public string Name
{
get { return (string)base["name"]; }
set { base["name"] = value; }
}
}
ServerDetails
public sealed class ServerDetails : ConfigurationSection
{
[ConfigurationProperty("ServerCollection")]
[ConfigurationCollection(typeof(ServerCollection), AddItemName = "add")]
public ServerCollection ServerCollection
{
get { return this["ServerCollection"] as ServerCollection; }
}
}
ServerCollection
public sealed class ServerCollection : ConfigurationElementCollection
{
public void Add(ServerElement ServerElement)
{
this.BaseAdd(ServerElement);
}
public override ConfigurationElementCollectionType CollectionType
{
get { return ConfigurationElementCollectionType.AddRemoveClearMap; }
}
protected override ConfigurationElement CreateNewElement()
{
return new ServerElement();
}
protected override object GetElementKey(ConfigurationElement element)
{
return ((ServerElement)element).Name;
}
}
Bin ich etwas fehlt? Muss ich etwas hinzufügen, so dass ich verwenden können, Linq mit einem benutzerdefinierten Konfigurations-element?
Übrigens, ich habe using System.Linq;
definiert, denn ich verwende es sonst wo in der gleichen Klasse.
InformationsquelleAutor der Frage Neil Knight | 2011-12-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Okay, da es alle schwach typisiert ist, müssen Sie entweder auf Aufforderung
Cast<>
oderOfType<>
explizit, oder geben Sie eine explizite Art der range-Variablen. Sie müssen auch angeben, dieServerCollection
Grundstück, auf IhreServerDetails
. Zum Beispiel:InformationsquelleAutor der Antwort Jon Skeet
Mit Brian Gideon ' s einfaches Beispiel von Rendite in seinem IEnumerable<T> die Umsetzung konnte ich aufzählen über meine ConfigurationElementCollection.
Würde es wie folgt Aussehen (mit der ursprünglichen Frage):
Während ich war NICHT immer der Fehler:
...Ich war nicht in der Lage zu iterieren über meine ConfigurationElementCollection mithilfe von LINQ. Diese Lösung beseitigt also mein problem ist, dass ich verwenden könnte, LINQ to iteration über meine Sammlung.
InformationsquelleAutor der Antwort cat5dev