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)行分頁(yè)教程(PagedList.Mvc)
- ASP.NET MVC中為DropDownListFor設(shè)置選中項(xiàng)的方法
- Asp.Net MVC中配置Serilog的方法
相關(guān)文章
C#實(shí)現(xiàn)TFTP客戶端的項(xiàng)目實(shí)踐
TFTP不僅有斷點(diǎn)續(xù)傳,多用戶級(jí)別限制等功能,本文主要介紹了C#實(shí)現(xiàn)TFTP客戶端的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04
分享兩種實(shí)現(xiàn)Winform程序的多語(yǔ)言支持的多種解決方案
本篇文章主要介紹了分享兩種實(shí)現(xiàn)Winform程序的多語(yǔ)言支持的多種解決方案,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧。2017-02-02
C#驗(yàn)證控件validator的簡(jiǎn)單使用
這篇文章主要介紹了C#驗(yàn)證控件validator的簡(jiǎn)單使用方法和示例,十分的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。2015-06-06
c#中WebService的介紹及調(diào)用方式小結(jié)
這篇文章主要給大家介紹了關(guān)于c#中的WebService及其調(diào)用方式的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11
C#實(shí)現(xiàn)在listview中插入圖片實(shí)例代碼
這篇文章主要介紹了C#實(shí)現(xiàn)在listview中插入圖片實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-03-03
c#使用正則表達(dá)式匹配字符串驗(yàn)證URL示例
這篇文章主要介紹了c#使用正則表達(dá)式的小示例,匹配字符串、驗(yàn)證URL,大家參考使用吧2013-12-12

