
/// <summary> 斷言器,用于判斷和拋出異常/// </summary>static class Assertor{ /// <summary> 如果value值是null 則拋出異常 /// </summary> /// <param name="value">參數值</param> /// <param name="name">參數名稱</param> public static void AreNull(object value, string name) { if (value == null) { throw new ArgumentNullException(name, "參數不能為null"); } } /// <summary> 如果value字符串是null或string.Empty 則拋出異常 /// </summary> /// <param name="value">參數值</param> /// <param name="name">參數名稱</param> public static void AreNullOrEmpty(string value, string name) { if (value == null || value.Length == 0) { throw new ArgumentNullException(name, "字符串不能為null或空"); } } /// <summary> 如果value字符串是 null、空還是僅由空白字符組成 則拋出異常 /// </summary> /// <param name="value">參數值</param> /// <param name="name">參數名稱</param> public static void AreNullOrWhiteSpace(string value, string name) { if (string.IsNullOrWhiteSpace(value)) { throw new ArgumentNullException(name, "字符串不能為null或連續空白"); } } /// <summary> 如果value集合是null或者Count是0 則拋出異常 /// </summary> /// <param name="value">參數值</param> /// <param name="name">參數名稱</param> public static void AreNullOrEmpty(ICollection value, string name) { if (value == null || value.Count == 0) { throw new ArgumentNullException(name, "集合不能為null且必須有元素"); } } /// <summary> 如果value值超過min~max 則拋出異常 /// </summary> /// <param name="value">參數值</param> /// <param name="name">參數名稱</param> /// <param name="min">最小值</param> /// <param name="max">最大值</param> public static void AreInRange<T>(T value, string name, T min, T max) where T : IComparable<T> { if (value.CompareTo(min) < 0 || value.CompareTo(max) > 0) { throw new ArgumentOutOfRangeException(name, value, "值不能大于" + max + "或小于" + min); } } /// <summary> 如果value值超過min~max 則拋出異常 /// </summary> /// <param name="value">參數值</param> /// <param name="name">參數名稱</param> /// <param name="min">最小值</param> /// <param name="max">最大值</param> public static void AreInRange<T>(IComparable value, string name, T min, T max) where T : IComparable { if (value.CompareTo(min) < 0 || value.CompareTo(max) > 0) { throw new ArgumentOutOfRangeException(name, value, "值不能大于" + max + "或小于" + min); } } /// <summary> 如果value不是T類型或其子類 則拋出異常 /// </summary> /// <param name="value">參數值</param> /// <param name="name">參數名稱</param> public static void AreType<T>(object value, string name) { if (value is T == false) { throw new ArgumentOutOfRangeException(name, value + " 值不是指定的類型 '" + typeof(T) + "'"); } } /// <summary> 如果value不是Type類型或其子類 則拋出異常 /// </summary> /// <param name="type">限定類型</param> /// <param name="value">參數值</param> /// <param name="name">參數名稱</param> public static void AreType(Type type, object value, string name) { if (type.IsInstanceOfType(value) == false) { throw new ArgumentOutOfRangeException(name, value + " 值不是指定的類型 '" + type + "'"); } } /// <summary> 如果value不是數字類型 則拋出異常 /// </summary> /// <param name="value">參數值</param> /// <param name="name">參數名稱</param> public static void AreNumberType(object value, string name) { var conv = value as IConvertible; if (conv == null) { var code = (int)conv.GetTypeCode(); if (code < 5 || code > 15) { throw new ArgumentOutOfRangeException(name, value + "不是數字類型"); } } } /// <summary> 如果condition是true 則拋出異常 /// </summary> /// <param name="condition">判斷條件</param> /// <param name="message">異常消息</param> public static void AreTrue<T>(bool condition, string message) where T : Exception, new() { if (condition) { var ex = new T(); var lit = Literacy.Cache(typeof(Exception), false); lit.Load.NonPublicField(); lit.Field["_message"].SetValue(ex, message); throw ex; } } /// <summary> 如果condition是false 則拋出異常 /// </summary> /// <param name="condition">判斷條件</param> /// <param name="message">異常消息</param> public static void AreFalse<T>(bool condition, string message) where T : Exception, new() { AreTrue<T>(!condition, message); } /// <summary> 如果condition是true 則拋出NotSupportedException異常 /// </summary> /// <param name="condition">判斷條件</param> /// <param name="message">異常消息</param> public static void AreTrue(bool condition, string message) { AreTrue<NotSupportedException>(condition, message); } /// <summary> 如果condition是false 則拋出NotSupportedException異常 /// </summary> /// <param name="condition">判斷條件</param> /// <param name="message">異常消息</param> public static void AreFalse(bool condition, string message) { AreTrue<NotSupportedException>(!condition, message); }}
PRivate static SimpleCache<IComponentFactory> GetFactoryCache(){ return new SimpleCache<IComponentFactory>(true, key => { IComponentFactory factory; var provider = _ProvideCache[key]; if (provider == DBProvider.Other) { var type = Type.GetType(key, false, false); Assertor.AreTrue<NotSupportedException>(type == null, "沒有找到名為" + key + "的類型"); factory = Activator.CreateInstance(type) as IComponentFactory; Assertor.AreTrue<NotSupportedException>(factory == null, type.FullName + "無法實例化或沒有繼承IComponentFactory"); } else { factory = ComponentFactory.Create(provider); } return factory; });}
https://code.csdn.net/snippets/389206
新聞熱點
疑難解答