資料讀取類:
namespace Synchronize
{
class Read: ConfigurationSection
{
private static readonly ConfigurationProperty s_property
= new ConfigurationProperty(string.Empty, typeof(MyKeyValueCollection), null,
ConfigurationPropertyOptions.IsDefaultCollection);
[ConfigurationProperty("", Options = ConfigurationPropertyOptions.IsDefaultCollection)]
public MyKeyValueCollection KeyValues
{
get
{
return (MyKeyValueCollection)base[s_property];
}
}
}
[ConfigurationCollection(typeof(MyKeyValueSetting))]
public class MyKeyValueCollection : ConfigurationElementCollection // 自定義一個集合
{
// 基本上,所有的方法都隻要簡單地調用基類的實作就可以了。
public MyKeyValueCollection() : base(StringComparer.OrdinalIgnoreCase) // 忽略大小寫
{
}
// 其實關鍵就是這個索引器。但它也是調用基類的實作,隻是做下類型轉就行了。
new public MyKeyValueSetting this[string name]
{
get
{
return (MyKeyValueSetting)base.BaseGet(name);
}
}
// 下面二個方法中抽象類中必須要實作的。
protected override ConfigurationElement CreateNewElement()
{
return new MyKeyValueSetting();
}
protected override object GetElementKey(ConfigurationElement element)
{
return ((MyKeyValueSetting)element).Key;
}
// 說明:如果不需要在代碼中修改集合,可以不實作Add, Clear, Remove
//public void Add(MyKeyValueSetting setting)
//{
// this.BaseAdd(setting);
//}
//public void Clear()
//{
// base.BaseClear();
//}
//public void Remove(string name)
//{
// base.BaseRemove(name);
//}
}
public class MyKeyValueSetting : ConfigurationElement // 集合中的每個元素
{
[ConfigurationProperty("key", IsRequired = true)]
public string Key
{
get { return this["key"].ToString(); }
set { this["key"] = value; }
}
[ConfigurationProperty("value", IsRequired = true)]
public string Value
{
get { return this["value"].ToString(); }
set { this["value"] = value; }
}
}
}
調用:
Read read= (Read)ConfigurationManager.GetSection("Data_Extraction");
//擷取自定義config中的全部值
string[] allExtraction = (from kv in read.KeyValues.Cast<MyKeyValueSetting>()
let s = string.Format("{0}={1}", kv.Key, kv.Value)
select s).ToArray(); //讀取的k,v值會被存放在string[]數組中
string str = string.Join("\r\n",
(from kv in read.KeyValues.Cast<MyKeyValueSetting>()
let s = string.Format("{0}={1}", kv.Key, kv.Value)
select s).ToArray()); //讀取的k,v值會被存放在字元串中
Hashtable check = new Hashtable();
for (int j = 0; j < allExtraction.Length; j++)
{
string[] sArray = allExtraction[j].Split('=');
check.Add(sArray[0], sArray[1]);
}