在Telerik的例子中看到这样一篇代码,使用Using方法写了一个继承自Dictionary的类,感觉挺有意思的: using System; using System.Linq; using System.Windows; using AssemblyNameCache = System.Collections.Generic.Dictionary<string, string>; namespace Telerik.Windows.QuickStart { internal static class ApplicationCache { internal static AssemblyNameCache AppCache { get; set; } static ApplicationCache() { AppCache = new AssemblyNameCache(); } internal static bool TryLoadingType(string typeName, out object result) { result = null; var searchType = ResolveType(typeName); if (searchType == null) return false; try { result = Activator.CreateInstance(searchType); return true; } catch (Exception ex) { var mesage = ex.Message; if (ex.InnerException != null) { mesage = ex.InnerException.Message; } MessageBox.Show(mesage); return false; } } internal static void SaveAssemblyNameInCache(string assemblyName) { if (!AppCache.Keys.Contains(assemblyName)) { AppCache.Add(assemblyName, assemblyName.Split(',')[0]); } } internal static bool IsLoadedAssembly(string assemblyName) { if (assemblyName.IndexOf('/') == 0) { assemblyName = assemblyName.Remove(0, 1); } assemblyName = assemblyName.Replace('/', '.'); bool exist = AppCache.Any(keyPair => string.Equals(keyPair.Value, assemblyName, StringComparison.OrdinalIgnoreCase)); return exist; } internal static Type ResolveType(string typeName) { var searchType = Type.GetType(typeName); if (searchType == null) { searchType = AppCache.Select(cacheItem => Type.GetType(string.Format("{0},{1}", typeName, cacheItem.Key))) .Where(type => type != null) .FirstOrDefault(); } return searchType; } } }