.NET實(shí)用擴(kuò)展方法詳解
持續(xù)更新的.NET實(shí)用擴(kuò)展方法,具體內(nèi)容如下
1. 字符串轉(zhuǎn)換為可空數(shù)值類型(int, long, float...類似)
/// <summary>
/// 將字符串轉(zhuǎn)換成32位整數(shù),轉(zhuǎn)換失敗返回null
/// </summary>
/// <param name="str">轉(zhuǎn)換的字符串</param>
/// <returns>轉(zhuǎn)換之后的整數(shù),或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>去除子字符串之后的結(jié)果</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>去除子字符串之后的結(jié)果</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">源數(shù)據(jù)</param>
/// <param name="startIndex">開始索引(返回時(shí)包括)</param>
/// <param name="endIndex">結(jié)束索引(返回時(shí)包括)</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. 通過指定鍵對(duì)序列去重, 不必實(shí)現(xiàn)IEqualityComparer接口
/// <summary>
/// 通過對(duì)指定的值進(jìn)行比較返回序列中的非重復(fù)元素。
/// </summary>
/// <typeparam name="T">序列中元素類型</typeparam>
/// <typeparam name="TResult">指定的比較屬性類型</typeparam>
/// <param name="source">源數(shù)據(jù)</param>
/// <param name="selector">應(yīng)用于每個(gè)元素的轉(zhuǎn)換函數(shù)</param>
/// <returns>一個(gè)包含源序列中的按指定屬性非重復(fù)元素</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. 獲取序列中重復(fù)的元素序列, 原理和去重類似
/// <summary>
/// 通過對(duì)指定的值進(jìn)行比較返回序列中重復(fù)的元素
/// </summary>
/// <typeparam name="T">序列中的數(shù)據(jù)類型</typeparam>
/// <typeparam name="TResult">指定的比較屬性類型</typeparam>
/// <param name="source">源數(shù)據(jù)</param>
/// <param name="selector">應(yīng)用于每個(gè)元素的轉(zhuǎn)換函數(shù)</param>
/// <returns>一個(gè)包含源序列中的按指定元素的重復(fù)元素</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>
/// 通過對(duì)指定的值進(jìn)行比較返回序列中重復(fù)的元素
/// </summary>
/// <typeparam name="T">序列中的數(shù)據(jù)類型</typeparam>
/// <typeparam name="TResult">指定的比較屬性類型</typeparam>
/// <param name="source">源數(shù)據(jù)</param>
/// <param name="selector">應(yīng)用于每個(gè)元素的轉(zhuǎn)換函數(shù)</param>
/// <returns>一個(gè)包含源序列中的按指定元素的重復(fù)元素</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;
}
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
jQuery實(shí)現(xiàn)倒計(jì)時(shí)跳轉(zhuǎn)的例子
這篇文章主要介紹了jQuery實(shí)現(xiàn)倒計(jì)時(shí)跳轉(zhuǎn)的例子,需要的朋友可以參考下2014-05-05
ASP.NET 2.0/3.5中直接操作Gridview控件插入新記錄
Gridview控件中并沒有提供像在FormView和DetailsView控件中那樣直接插入新記錄操作的支持。2008-11-11
ASP.NET Eval進(jìn)行數(shù)據(jù)綁定的方法
ASP.NET Eval在數(shù)據(jù)綁定方面的應(yīng)用是眾所周知的,不過技術(shù)在發(fā)展,當(dāng)ASP.NET Eval 1.1變成ASP.NET Eval 2.0的時(shí)候,在操作的時(shí)候會(huì)有什么變化呢?2013-04-04
ASP.NET簡(jiǎn)化編輯界面解決思路及實(shí)現(xiàn)代碼
簡(jiǎn)化用戶操作界面,添加功能一般沒法簡(jiǎn)化,但是如果是在GridView做顯示,編輯,更新與刪除,會(huì)讓用戶在編輯,需要點(diǎn)擊編輯銨鈕,再進(jìn)行編輯,或是取消編輯,下面是改進(jìn)的方法做了演示動(dòng)畫,感興趣的朋友可以了解下2013-01-01
.Net Core和jexus配置HTTPS服務(wù)方法
下面小編就為大家分享一篇.Net Core和jexus配置HTTPS服務(wù)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2018-02-02
asp.net 頁(yè)面延時(shí)五秒,跳轉(zhuǎn)到另外的頁(yè)面
asp.net 頁(yè)面延時(shí)五秒,跳轉(zhuǎn)到另外的頁(yè)面的實(shí)現(xiàn)代碼。2009-12-12
使用ASP.NET MVC引擎開發(fā)插件系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了使用ASP.NET MVC引擎開發(fā)插件系統(tǒng)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
ASP.NET設(shè)計(jì)網(wǎng)絡(luò)硬盤之查看文件夾實(shí)現(xiàn)代碼
下面要介紹的實(shí)例包括網(wǎng)上硬盤的許多功能,將一步步為大家進(jìn)行介紹。首先創(chuàng)建工程實(shí)例,然后進(jìn)行主界面的設(shè)計(jì),最后對(duì)各個(gè)功能的實(shí)現(xiàn)分別進(jìn)行介紹2012-10-10
ASP.NET Core3.1 Ocelot負(fù)載均衡的實(shí)現(xiàn)
這篇文章主要介紹了ASP.NET Core3.1 Ocelot負(fù)載均衡的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11

