代码演示 .NET 4.5 自带的 ReadonlyCollection 的使用
2014-05-29 15:53 音乐让我说 阅读(974) 评论(0) 编辑 收藏 举报代码如下:
1.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConfigurationLibrary { public class ConfigElement { public int Id { get; set; } public string Value { get; set; } } }
2.
using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConfigurationLibrary { public class ConfigurationContainer { private ReadOnlyDictionary<string, ConfigElement> _configuration; private Dictionary<string, ConfigElement> _mutableConfiguration; public ReadOnlyDictionary<string, ConfigElement> Configuration { get { _configuration = new ReadOnlyDictionary<string, ConfigElement>(_mutableConfiguration); return _configuration; } } public ConfigurationContainer() { _mutableConfiguration = new Dictionary<string, ConfigElement>(); _mutableConfiguration.Add("key", new ConfigElement { Id=1, Value="value1"}); _mutableConfiguration.Add("key1", new ConfigElement { Id = 1, Value = "value1" }); _mutableConfiguration["key2"] = new ConfigElement { Id = 1, Value = "value1" }; } public bool AddToConfiguration(string key, ConfigElement value) { if (ConfigurationAllowed(key, value)) { _mutableConfiguration.Add(key, value); return true; } return false; } private bool ConfigurationAllowed(string key, ConfigElement value) { // Put in your checks and balances // here and return the appropriate result return true; } } }
3.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using ConfigurationLibrary; namespace ConfigurationUser { public class ConfigurationConsumer { IReadOnlyDictionary<string, ConfigurationLibrary.ConfigElement> _config; public ConfigurationConsumer() { _config = new ConfigurationLibrary .ConfigurationContainer().Configuration; } public void DoSomething() { if (_config.ContainsKey("key")) { // Do Something Console .WriteLine(string.Format("Did Something, Got - {0}", _config["key"].Value)); } else { // Do Something Else. Console.WriteLine("Did Something Else"); } } public void BeNaughtyWithConfiguration() { IDictionary<string, ConfigElement> convertToReadWrite = (IDictionary<string, ConfigElement>)_config; ConfigElement element = convertToReadWrite["key"]; element.Value = "Haa Haa"; Console.WriteLine(element.Value); Console.WriteLine(convertToReadWrite["key"].Value); Console.ReadLine(); // 上面的代码都能运行通过,下面这行代码将抛出异常。 convertToReadWrite.Add("Key12345", new ConfigElement { Id = 100, Value = "Haa Haa" }); } } }
4.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ReadOnlyCollectionSample { class Program { static void Main(string[] args) { ConfigurationUser.ConfigurationConsumer consumer = new ConfigurationUser.ConfigurationConsumer(); consumer.DoSomething(); Console.ReadLine(); consumer.BeNaughtyWithConfiguration(); } } }
谢谢浏览!
作者:音乐让我说(音乐让我说 - 博客园)
出处:http://music.cnblogs.com/
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。