クラス「ImageElement:ConfigurationElement」の要素を含むクラス「ImageElementCollection:ConfigurationElementCollection」があります。
ここ StackOverflow で他の非常に知的な人のアドバイスを使用して、私は自分のプログラムでこれらの項目を利用する方法を考え出しました。
MonitorConfig Config = (MonitorConfig)ConfigurationManager.GetSection("MonitorConfig");
ただし、このコレクションのアイテムにアクセスしようとすると...
foreach (var image in Config.Images) Debug.WriteLine(image.Name);
...最善の努力にもかかわらず、"image" が ImageElement ではなくオブジェクトとして宣言されているため、Name プロパティの下に波線が表示されます。
これは私の宣言で間違っていることですか、それとも、その foreach で「var」を「ImageElement」に交換することで誰もが対処するだけですか?
以下にある構成ハンドラーのコード:
public class MonitorConfig : ConfigurationSection
{
[ConfigurationProperty("Frequency", DefaultValue = 5D, IsRequired = false)]
public double Frequency
{
get { return (double)this["Frequency"]; }
}
[ConfigurationProperty("Images", IsRequired = false)]
public ImageElementCollection Images
{
get { return (ImageElementCollection)this["Images"]; }
}
}
[ConfigurationCollection(typeof(ImageElement), AddItemName = "Image")]
public class ImageElementCollection : ConfigurationElementCollection
{
public ImageElement this[object elementKey]
{
get { return (ImageElement)BaseGet(elementKey); }
}
public void Add(ImageElement element)
{
base.BaseAdd(element);
}
protected override ConfigurationElement CreateNewElement()
{
return new ImageElement();
}
protected override object GetElementKey(ConfigurationElement element)
{
return ((ImageElement)element).Name;
}
}
public class ImageElement : ConfigurationElement
{
[ConfigurationProperty("Name", IsRequired = true, IsKey = true)]
public string Name
{
get { return (string)this["Name"]; }
}
}