C#、ASP.NET通用扩展工具类之LogicSugar
说明一下性能方面还可以接受循环1000次普通Switch是用了0.001秒,扩展函数为0.002秒 ,如果是大项目在有负载均衡的情况下完全可以无视掉,小项目也不会计较这点性能了。
注意需要引用“SyntacticSugar”
用法:
//【Switch】 stringbookKey="c#"; //以前写法 stringmyBook=""; switch(bookKey) { case"c#": myBook="asp.net技术"; break; case"java": myBook="java技术"; break; case"sql": myBook="mssql技术"; break; default: myBook="要饭技术"; break;//打这么多break和封号,手痛吗? } //现在写法 myBook=bookKey.Switch().Case("c#","asp.net技术").Case("java","java技术").Case("sql","sql技术").Default("要饭技术").Break();//点的爽啊 /** C#类里看不出效果,在mvcrazor里?、&&或者||直接使用都会报错,需要外面加一个括号,嵌套多了很不美观,使用自定义扩展函数就没有这种问题了。 */ boolisSuccess=true; //【IIF】 //以前写法 vartrueVal1=isSuccess?100:0; //现在写法 vartrueVal2=isSuccess.IIF(100); //以前写法 varstr=isSuccess?"我是true":""; //现在写法 varstr2=isSuccess.IIF("我是true"); //以前写法 vartrueVal3=isSuccess?1:2; //现在写法 vartrueVal4=isSuccess.IIF(1,2); stringid=""; stringid2=""; //以前写法 isSuccess=(id==id2)&&(id!=null&&Convert.ToInt32(id)>0); //现在写法 isSuccess=(id==id2).And(id!=null,Convert.ToInt32(id)>0); //以前写法 isSuccess=id!=null||id!=id2; //现在写法 isSuccess=(id!=null).Or(id!=id2);
源码:
usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; namespaceSyntacticSugar { ///<summary> ///**描述:逻辑糖来简化你的代码 ///**创始时间:2015-6-1 ///**修改时间:- ///**作者:sunkaixuan ///</summary> publicstaticclassLogicSugarExtenions { ///<summary> ///根据表达式的值,来返回两部分中的其中一个。 ///</summary> ///<typeparamname="T"></typeparam> ///<paramname="thisValue"></param> ///<paramname="trueValue">值为true返回trueValue</param> ///<paramname="falseValue">值为false返回falseValue</param> ///<returns></returns> publicstaticTIIF<T>(thisboolthisValue,TtrueValue,TfalseValue) { if(thisValue) { returntrueValue; } else { returnfalseValue; } } ///<summary> ///根据表达式的值,true返回trueValue,false返回string.Empty; ///</summary> ///<typeparamname="T"></typeparam> ///<paramname="thisValue"></param> ///<paramname="trueValue">值为true返回trueValue</param> ///<returns></returns> publicstaticstringIIF(thisboolthisValue,stringtrueValue) { if(thisValue) { returntrueValue; } else { returnstring.Empty; } } ///<summary> ///根据表达式的值,true返回trueValue,false返回0 ///</summary> ///<typeparamname="T"></typeparam> ///<paramname="thisValue"></param> ///<paramname="trueValue">值为true返回trueValue</param> ///<returns></returns> publicstaticintIIF(thisboolthisValue,inttrueValue) { if(thisValue) { returntrueValue; } else { return0; } } ///<summary> ///根据表达式的值,来返回两部分中的其中一个。 ///</summary> ///<typeparamname="T"></typeparam> ///<paramname="thisValue"></param> ///<paramname="trueValue">值为true返回trueValue</param> ///<paramname="falseValue">值为false返回falseValue</param> ///<returns></returns> publicstaticTIIF<T>(thisbool?thisValue,TtrueValue,TfalseValue) { if(thisValue==true) { returntrueValue; } else { returnfalseValue; } } ///<summary> ///所有值为true,则返回true否则返回false ///</summary> ///<paramname="thisValue"></param> ///<paramname="andValues"></param> ///<returns></returns> publicstaticboolAnd(thisboolthisValue,paramsbool[]andValues) { returnthisValue&&!andValues.Where(c=>c==false).Any(); } ///<summary> ///只要有一个值为true,则返回true否则返回false ///</summary> ///<paramname="thisValue"></param> ///<paramname="andValues"></param> ///<returns></returns> publicstaticboolOr(thisboolthisValue,paramsbool[]andValues) { returnthisValue||andValues.Where(c=>c==true).Any(); } ///<summary> ///Switch().Case().Default().Break() ///</summary> ///<typeparamname="T"></typeparam> ///<paramname="thisValue"></param> ///<returns></returns> publicstaticSwitchSugarModel<T>Switch<T>(thisTthisValue) { varreval=newSwitchSugarModel<T>(); reval.SourceValue=thisValue; returnreval; } publicstaticSwitchSugarModel<T>Case<T,TReturn>(thisSwitchSugarModel<T>switchSugar,TcaseValue,TReturnreturnValue) { if(switchSugar.SourceValue.Equals(caseValue)) { switchSugar.IsEquals=true; switchSugar.ReturnVal=returnValue; } returnswitchSugar; } publicstaticSwitchSugarModel<T>Default<T,TReturn>(thisSwitchSugarModel<T>switchSugar,TReturnreturnValue) { if(switchSugar.IsEquals==false) switchSugar.ReturnVal=returnValue; returnswitchSugar; } publicstaticdynamicBreak<T>(thisSwitchSugarModel<T>switchSugar) { stringreval=switchSugar.ReturnVal; switchSugar=null;//清空对象,节约性能 returnreval; } publicclassSwitchSugarModel<T> { publicTSourceValue{get;set;} publicboolIsEquals{get;set;} publicdynamicReturnVal{get;set;} } } }