国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

詳解.NET實用的擴展方法

2024-07-10 12:54:29
字體:
來源:轉載
供稿:網友

我們在編寫代碼的時候,經常會遇到DLL中提供的方法,其實這些方法都是不夠使用的,本文是錯新技術頻道詳解.NET實用的擴展方法,一起跟著小編來了解吧!

1. 字符串轉換為可空數值類型(int, long, float...類似)

  /// <summary>  /// 將字符串轉換成32位整數,轉換失敗返回null  /// </summary>  /// <param name="str">轉換的字符串</param>  /// <returns>轉換之后的整數,或null</returns>  public static int? TryParseToInt32(this string str)  {    if (string.IsNullOrWhiteSpace(str))      return null;    var result = 0;    if (int.TryParse(str, out result))      return result;    else      return null;  }

2. 去除子字符串

  /// <summary>  /// 去除子字符串  /// </summary>  /// <param name="str">原字符串</param>  /// <param name="substring">要去除的字符串</param>  /// <returns>去除子字符串之后的結果</returns>  public static string DeSubstring(this string str, string substring)  {    if (string.IsNullOrEmpty(str) || string.IsNullOrEmpty(substring) || !str.Contains(substring))    {      return str;    }    return Regex.Replace(str, Regex.Escape(substring), string.Empty);  }  /// <summary>  /// 去除子字符串  /// </summary>  /// <param name="str">原字符串</param>  /// <param name="substrings">要去除的子字符串</param>  /// <returns>去除子字符串之后的結果</returns>  public static string DeSubstring(this string str, params string[] substrings)  {    if (string.IsNullOrEmpty(str))      return str;    if (substrings == null)      return str;    var newStr = str;    foreach (var item in substrings)    {      newStr = newStr.DeSubstring(item);    }    return newStr;  }

3. 獲取子序列

  /// <summary>  /// 獲取子序列  /// </summary>  /// <typeparam name="T">序列中元素類型</typeparam>  /// <param name="source">源數據</param>  /// <param name="startIndex">開始索引(返回時包括)</param>  /// <param name="endIndex">結束索引(返回時包括)</param>  /// <returns>子序列</returns>  public static IEnumerable<T> SubEnumerable<T>(this IEnumerable<T> source, int startIndex, int endIndex)  {    if (source == null)      yield return default(T);    var length = source.Count();    if (startIndex < 0 || endIndex < startIndex || startIndex >= length || endIndex >= length)      throw new ArgumentOutOfRangeException();    var index = -1;    foreach (var item in source)    {      index++;      if (index < startIndex)        continue;      if (index > endIndex)        yield break;      yield return item;    }  }

4. 通過指定鍵對序列去重, 不必實現IEqualityComparer接口

  /// <summary>  /// 通過對指定的值進行比較返回序列中的非重復元素。  /// </summary>  /// <typeparam name="T">序列中元素類型</typeparam>  /// <typeparam name="TResult">指定的比較屬性類型</typeparam>  /// <param name="source">源數據</param>  /// <param name="selector">應用于每個元素的轉換函數</param>  /// <returns>一個包含源序列中的按指定屬性非重復元素</returns>  public static IEnumerable<T> Distinct<T, TResult>(this IEnumerable<T> source, Func<T, TResult> selector)  {    if (source == null)      throw new ArgumentNullException(nameof(source));    if (selector == null)      throw new ArgumentNullException(nameof(selector));    var set = new HashSet<TResult>();    foreach (var item in source)    {      var result = selector(item);      if (set.Add(result))      {        yield return item;      }    }  }

5. 獲取序列中重復的元素序列, 原理和去重類似

  /// <summary>  /// 通過對指定的值進行比較返回序列中重復的元素  /// </summary>  /// <typeparam name="T">序列中的數據類型</typeparam>  /// <typeparam name="TResult">指定的比較屬性類型</typeparam>  /// <param name="source">源數據</param>  /// <param name="selector">應用于每個元素的轉換函數</param>  /// <returns>一個包含源序列中的按指定元素的重復元素</returns>  public static IEnumerable<T> Identical<T>(this IEnumerable<T> source)  {    if (source == null)      throw new ArgumentNullException(nameof(source));    var setT = new HashSet<T>();    foreach (var item in source)    {      if (!setT.Add(item))      {        yield return item;      }    }  }  /// <summary>  /// 通過對指定的值進行比較返回序列中重復的元素  /// </summary>  /// <typeparam name="T">序列中的數據類型</typeparam>  /// <typeparam name="TResult">指定的比較屬性類型</typeparam>  /// <param name="source">源數據</param>  /// <param name="selector">應用于每個元素的轉換函數</param>  /// <returns>一個包含源序列中的按指定元素的重復元素</returns>  public static IEnumerable<T> Identical<T, TResult>(this IEnumerable<T> source, Func<T, TResult> selector)  {    if (source == null)      throw new ArgumentNullException(nameof(source));    if (selector == null)      throw new ArgumentNullException(nameof(selector));    var setTResult = new HashSet<TResult>();    foreach (var item in source)    {      var result = selector(item);      if (!setTResult.Add(result))      {        yield return item;      }    }  }

上文是錯新技術頻道小編詳解.NET實用的擴展方法,大家了解的怎樣了呢?更多的內容盡在js.VeVb.com,希望能幫到你。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 芒康县| 福州市| 锡林郭勒盟| 木兰县| 安泽县| 富平县| 大姚县| 迁西县| 休宁县| 华安县| 含山县| 潜山县| 灵璧县| 彭山县| 启东市| 甘洛县| 虎林市| 儋州市| 连州市| 江北区| 根河市| 宽城| 朝阳市| 高州市| 闻喜县| 金堂县| 盐池县| 饶河县| 吴川市| 永顺县| 宁明县| 阳高县| 潮安县| 民和| 沭阳县| 菏泽市| 二连浩特市| 武冈市| 时尚| 洞头县| 临高县|