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;}
}
}
}