C#ASP.NET 通用擴充函數之 LogicSugar 簡單好用

來源:互聯網
上載者:User

標籤:

 

說明一下效能方面 還可以接受 迴圈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    /// ** 使用說明:http://www.cnblogs.com/sunkaixuan/p/4545338.html    /// </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;//清Null 物件,節約效能            return reval;        }        public class SwitchSugarModel<T>        {            public T SourceValue { get; set; }            public bool IsEquals { get; set; }            public dynamic ReturnVal { get; set; }        }    }}

  

C#ASP.NET 通用擴充函數之 LogicSugar 簡單好用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.