时间:2021-05-20
说明一下性能方面 还可以接受 循环1000次普通Switch是用了0.001秒 ,扩展函数为0.002秒 , 如果是大项目在有负载均衡的情况下完全可以无视掉,小项目也不会计较这点性能了。
注意需要引用 “SyntacticSugar”
用法:
//【Switch】string bookKey = "c#"; //以前写法string myBook = "";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#类里看不出效果, 在mvc razor里 ? 、&& 或者 || 直接使用都会报错,需要外面加一个括号,嵌套多了很不美观,使用自定义扩展函数就没有这种问题了。 */ bool isSuccess = true; //【IIF】//以前写法var trueVal1 = isSuccess ? 100 :0;//现在写法var trueVal2 = isSuccess.IIF(100); //以前写法var str = isSuccess ? "我是true" : "";//现在写法var str2 = isSuccess.IIF("我是true"); //以前写法var trueVal3 = isSuccess ? 1 : 2;//现在写法var trueVal4 = isSuccess.IIF(1, 2); string id = "";string id2 = ""; //以前写法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);源码:
using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace SyntacticSugar{ /// <summary> /// ** 描述:逻辑糖来简化你的代码 /// ** 创始时间:2015-6-1 /// ** 修改时间:- /// ** 作者:sunkaixuan /// </summary> public static class LogicSugarExtenions { /// <summary> /// 根据表达式的值,来返回两部分中的其中一个。 /// </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> /// 根据表达式的值,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> /// 根据表达式的值,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> /// 根据表达式的值,来返回两部分中的其中一个。 /// </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> /// 只要有一个值为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;//清空对象,节约性能 return reval; } public class SwitchSugarModel<T> { public T SourceValue { get; set; } public bool IsEquals { get; set; } public dynamic ReturnVal { get; set; } } } }声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Asp.Net(C#)使用oleDbConnection连接Excel"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=
本文实例讲述了asp.net(C#)实现功能强大的时间日期处理类。分享给大家供大家参考,具体如下:usingSystem;usingSystem.Data;us
ASP.NET中前台javascript与后台代码调用1如何在JavaScript访问C#函数?2.如何在JavaScript访问C#变量?3.如何在C#中访问
ASP.NET(C#)中生成中文汉字验证码源码如下:usingSystem;usingSystem.Data;usingSystem.Configurati
本文使用Asp.Net(C#)调用互联网上公开的WebServices(http://.cn/WebServices/WeatherWebService.asm