C 高階系列 動態Lamada(二 優化)

2022-01-16 12:11:25 字數 2324 閱讀 5117

前言:前幾天寫了一篇動態lamada的文章c#高階系列——動態lamada,受園友xiao99的啟發,今天打算來重新優化下這個動態lamada的工具類。在此做個筆記,以免以後忘了。

上篇裡面我們說了動態lamada的使用必要性以及使用場景,但是感覺用在專案裡面還不太方便,最難用的就是需要傳遞屬性名稱的字串,感覺這有點太lower了。然後就是那個列舉的使用著實感覺沒啥必要,我們只需要將contains、equal、lessthan、greaterthan等方法分別封裝乙個獨立的方法即可。好了,多說容易讓人頭暈,直接上**吧。

public

class lamadaextentionwhere dto:new

()

//唯讀屬性,返回生成的lamada

public expressionbool>>lamada

}//////

字串contains篩選

/// ///

///public

void contains(expressionstring>> expproperty, object

strvalue)

//////

等於

/// ///

///public

void equal(expressionobject>> expproperty, object

strvalue)

//////

小於

/// ///

///public

void lessthan(expressionobject>> expproperty, object

strvalue)

//////

小於等於

/// ///

///public

void lessthanorequal(expressionobject>> expproperty, object

strvalue)

//////

大於

/// ///

///public

void greaterthan(expressionobject>> expproperty, object

strvalue)

//////

大於等於

/// ///

///public

void greaterthanorequal(expressionobject>> expproperty, object

strvalue)

private expressionbool>>getlambda()

if (whereexpr == null

)

return

null

;

return expression.lambda>(whereexpr, m_parameter);

}//得到memberexpression

private memberexpression getmemberexpression(expressionobject>>exp)

}

可以看出,對於常用的操作我們封裝了contains、equal、lessthan、lessthanorequal、greaterthan、greaterthanorequal六個方法,除了contains方法的引數直接使用了expression>型別以為,其他都用的expression>。因為contains方法只可能是string型別的變數操作,而其他操作可能涉及其他型別,就是為了傳這個object型別,有個問題博主除錯了很久,由於傳過來的是object,這個要得到屬性的真是型別貌似不那麼容易了,找了很久都沒找到。最後只能通過getmemberexpression這個方法來得到memberexpression。

還是來看看如何使用:

public

object getusers(int limit, int offset, string username, string

fullname)

最大的方便就是我們想要篩選的字段可以通過lamada點出來了,再看看之前的那種用法

olamadaextention.getexpression("

user_name

", username, expressiontype.contains);

有沒有瞬間高大上。user_name直接點出來,比敲字串要爽吧。感謝神奇的lamada,感謝全能的c#,感謝熱心的園友。

webpack系列二 webpack打包優化探索

雖然webpack的已經公升級到了webpack4,而我們目前還在使用webpack3,但其中的優化點都大同小異,公升級後同樣適用。這三條原則永遠是一切優化的前提 1 主要配置 2plugins 3 new webpack.optimize.moduleconcatenationplugin 4 1...

c 高階二(動態分配記憶體)

1,new方法 建立 new 釋放delete 刪除陣列為delete a 注意釋放後需要令指標為null,防止產生野指標 建立普通變數 int a newint 建立陣列變數 int a newint 10 刪除普通變數記憶體 delete a 刪除陣列變數 delete a 防止a變為野指標 a...

C語言高階程式設計系列

關於c語言高階程式設計系列文章。筆者主要從事linux kernel bsp driver以及tcp ip方向工作,日常主要使用c語言。工作數年,感嘆c語言的簡潔卻不簡單,至今仍不敢說精通c,希望可以通過此系列文章的總結系統地提公升自己。更新於 20191124 目錄 c語言高階程式設計 預處理中的...