C#、ASP.NET通用擴(kuò)展工具類之LogicSugar
說明一下性能方面 還可以接受 循環(huán)1000次普通Switch是用了0.001秒 ,擴(kuò)展函數(shù)為0.002秒 , 如果是大項(xiàng)目在有負(fù)載均衡的情況下完全可以無視掉,小項(xiàng)目也不會(huì)計(jì)較這點(diǎn)性能了。
注意需要引用 “SyntacticSugar”
用法:
//【Switch】 string bookKey = "c#"; //以前寫法 string myBook = ""; switch (bookKey) { case "c#": myBook = "asp.net技術(shù)"; break; case "java": myBook = "java技術(shù)"; break; case "sql": myBook = "mssql技術(shù)"; break; default: myBook = "要飯技術(shù)"; break;//打這么多break和封號(hào),手痛嗎? } //現(xiàn)在寫法 myBook =bookKey.Switch().Case("c#", "asp.net技術(shù)").Case("java", "java技術(shù)").Case("sql", "sql技術(shù)").Default("要飯技術(shù)").Break();//點(diǎn)的爽啊 /** C#類里看不出效果, 在mvc razor里 ? 、&& 或者 || 直接使用都會(huì)報(bào)錯(cuò),需要外面加一個(gè)括號(hào),嵌套多了很不美觀,使用自定義擴(kuò)展函數(shù)就沒有這種問題了。 */ bool isSuccess = true; //【IIF】 //以前寫法 var trueVal1 = isSuccess ? 100 :0; //現(xiàn)在寫法 var trueVal2 = isSuccess.IIF(100); //以前寫法 var str = isSuccess ? "我是true" : ""; //現(xiàn)在寫法 var str2 = isSuccess.IIF("我是true"); //以前寫法 var trueVal3 = isSuccess ? 1 : 2; //現(xiàn)在寫法 var trueVal4 = isSuccess.IIF(1, 2); string id = ""; string id2 = ""; //以前寫法 isSuccess = (id == id2) && (id != null && Convert.ToInt32(id) > 0); //現(xiàn)在寫法 isSuccess = (id == id2).And(id != null, Convert.ToInt32(id) > 0); //以前寫法 isSuccess = id != null || id != id2; //現(xiàn)在寫法 isSuccess = (id != null).Or(id != id2);
源碼:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace SyntacticSugar { /// <summary> /// ** 描述:邏輯糖來簡(jiǎn)化你的代碼 /// ** 創(chuàng)始時(shí)間:2015-6-1 /// ** 修改時(shí)間:- /// ** 作者:sunkaixuan /// </summary> public static class LogicSugarExtenions { /// <summary> /// 根據(jù)表達(dá)式的值,來返回兩部分中的其中一個(gè)。 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="thisValue"></param> /// <param name="trueValue">值為true返回 trueValue</param> /// <param name="falseValue">值為false返回 falseValue</param> /// <returns></returns> public static T IIF<T>(this bool thisValue, T trueValue, T falseValue) { if (thisValue) { return trueValue; } else { return falseValue; } } /// <summary> /// 根據(jù)表達(dá)式的值,true返回trueValue,false返回string.Empty; /// </summary> /// <typeparam name="T"></typeparam> /// <param name="thisValue"></param> /// <param name="trueValue">值為true返回 trueValue</param> /// <returns></returns> public static string IIF(this bool thisValue, string trueValue) { if (thisValue) { return trueValue; } else { return string.Empty; } } /// <summary> /// 根據(jù)表達(dá)式的值,true返回trueValue,false返回0 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="thisValue"></param> /// <param name="trueValue">值為true返回 trueValue</param> /// <returns></returns> public static int IIF(this bool thisValue, int trueValue) { if (thisValue) { return trueValue; } else { return 0; } } /// <summary> /// 根據(jù)表達(dá)式的值,來返回兩部分中的其中一個(gè)。 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="thisValue"></param> /// <param name="trueValue">值為true返回 trueValue</param> /// <param name="falseValue">值為false返回 falseValue</param> /// <returns></returns> public static T IIF<T>(this bool? thisValue, T trueValue, T falseValue) { if (thisValue == true) { return trueValue; } else { return falseValue; } } /// <summary> /// 所有值為true,則返回true否則返回false /// </summary> /// <param name="thisValue"></param> /// <param name="andValues"></param> /// <returns></returns> public static bool And(this bool thisValue, params bool[] andValues) { return thisValue && !andValues.Where(c => c == false).Any(); } /// <summary> /// 只要有一個(gè)值為true,則返回true否則返回false /// </summary> /// <param name="thisValue"></param> /// <param name="andValues"></param> /// <returns></returns> public static bool Or(this bool thisValue, params bool[] andValues) { return thisValue || andValues.Where(c => c == true).Any(); } /// <summary> /// Switch().Case().Default().Break() /// </summary> /// <typeparam name="T"></typeparam> /// <param name="thisValue"></param> /// <returns></returns> public static SwitchSugarModel<T> Switch<T>(this T thisValue) { var reval = new SwitchSugarModel<T>(); reval.SourceValue = thisValue; return reval; } public static SwitchSugarModel<T> Case<T, TReturn>(this SwitchSugarModel<T> switchSugar, T caseValue, TReturn returnValue) { if (switchSugar.SourceValue.Equals(caseValue)) { switchSugar.IsEquals = true; switchSugar.ReturnVal = returnValue; } return switchSugar; } public static SwitchSugarModel<T> Default<T, TReturn>(this SwitchSugarModel<T> switchSugar, TReturn returnValue) { if (switchSugar.IsEquals == false) switchSugar.ReturnVal = returnValue; return switchSugar; } public static dynamic Break<T>(this SwitchSugarModel<T> switchSugar) { string reval = switchSugar.ReturnVal; switchSugar = null;//清空對(duì)象,節(jié)約性能 return reval; } public class SwitchSugarModel<T> { public T SourceValue { get; set; } public bool IsEquals { get; set; } public dynamic ReturnVal { get; set; } } } }
- asp.net log4net的使用方法
- Asp.net Mvc 身份驗(yàn)證、異常處理、權(quán)限驗(yàn)證(攔截器)實(shí)現(xiàn)代碼
- asp.net mvc下拉框Html.DropDownList 和DropDownListFor的常用方法
- 使用asp.net MVC4中的Bundle遇到的問題及解決辦法分享
- asp.net MVC實(shí)現(xiàn)無組件上傳圖片實(shí)例介紹
- ASP.NET MVC DropDownList數(shù)據(jù)綁定及使用詳解
- IIS7 配置大全(ASP.NET 2.0, WCF, ASP.NET MVC,php)
- ASP.NET MVC 5使用X.PagedList.Mvc進(jìn)行分頁教程(PagedList.Mvc)
- ASP.NET MVC中為DropDownListFor設(shè)置選中項(xiàng)的方法
- Asp.Net MVC中配置Serilog的方法
相關(guān)文章
C#使用Pipelines實(shí)現(xiàn)處理Socket數(shù)據(jù)包
這篇文章主要為大家詳細(xì)介紹了C#如何使用Pipelines實(shí)現(xiàn)處理Socket數(shù)據(jù)包,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12一款域名監(jiān)控小工具 Domain(IP)Watcher 實(shí)現(xiàn)代碼
域名是否正常,網(wǎng)站是否可以正常訪問是很頭痛的問題,怎樣簡(jiǎn)單地監(jiān)控域名是否可以正常訪問呢,這里發(fā)布一款域名監(jiān)控小工具:Domain(IP)Watcher2011-11-11C#中DataTable實(shí)現(xiàn)行列轉(zhuǎn)換的方法
這篇文章主要介紹了C#中DataTable實(shí)現(xiàn)行列轉(zhuǎn)換的方法,實(shí)例分析了C#操作DataTable的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04Winform使用DataGridView實(shí)現(xiàn)下拉篩選
這篇文章主要為大家詳細(xì)介紹了Winform如何使用原生DataGridView實(shí)現(xiàn)下拉篩選功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2023-09-09