在寫.Net的程式時,會使用到所謂的Attribute,例如前篇文章所提到的WCF,利用Attribute來設定Rest的路徑格式。
這樣方便的功能,只要利用System.Attribute,自己實作的類別也能達到相同的目的。
在寫.Net的程式時,會使用到所謂的Attribute,例如前篇文章所提到的WCF,利用Attribute來設定Rest的路徑格式。
這樣方便的功能,只要利用System.Attribute,自己實作的類別也能達到相同的目的。
今天同事問我有關LINQ上OrderBy的問題,所以就寫了這篇筆記。
在一些網站的客服系統,都會有制式的樣板用來回答網站會員的問題。而這類的需求,在.NET上有提供所謂的T4 Template來讓程式設計師來使用,使用上是相當的容易。
一般而言,函式的回傳值只能有一個,如果需要一次回傳多個,在C#中可以使用out關鍵字。但這樣的方式總是不夠直覺,而Tuple這個類別可以滿足這類的需求。
在上一篇文章中提到如何實作LINQ的Where與OrderBy,但最重要的Select只能回傳指定的型別,無法從外部自訂,更不用說匿名型別。但只要照著下列方法做就可以了。
注意到selector的型別是Expression,實際上用Func也可以,但為了彈性,也就是方便去判別傳進來的函式是什麼內容,用Expression會比較好。
在一篇文章LINQ中Where函式的實作中提到LINQ的基本實作,本篇文章將講解如何同時讓類別同時支援Where與Orderby。
在使用LINQ的查詢運算式時,程式為了能在執行時動態確認運算式的內容,都會使用到Expression Tree,如果想讓自己實作的類別支援較複雜的查詢,就會用到Expression Tree。
這兩天因為工作的關係接觸到HttpMoudle,發現這東西沒想像中的難搞,然後在突發奇想下就來試試弄自製的Rounting功能。
一般來說,只要物件是繼承自IEnumerable,都能支援LINQ查詢。除了LINQ to SQL這類非.NET資料來源,一般來說LINQ的查詢都是採線性搜尋,如果想套上自己的搜尋方法,就得先了解如何擴充LINQ功能。
早期.NET上要產生XML結構的資料可以說相當麻煩,要用到蠻多相關的類別。而在LINQ問世後,這過程就被簡化了許多。
在ASP.NET上使用快取資料時,通常只考慮到如何將資料加進去,但有時候可能需要對這些資料做管理,這時候就需要將每個Key都列出來及針對Key做刪除的功能。當程式需要將所有的快取資料列出來時,可以用下列的寫法:
從Value屬性取得物件後,可以透過GetType去得到該物件的型別。如果有足夠的熱血想去寫管理物件的程式,用Reflection的相關類別去做就可以了。另外想移除快取中某個Key值的資料,可以透過Remove來做:
參考資料
資工系的作業系統課程中,有一章會講到Critical Section,主要是介紹當系統的某一項資源被多個程式存取時,所會造成的問題。在多執行緒的程式中,這樣的問題是要特別去考慮到的。
在一個大型流量的網站中,通常必須考慮到流量以及伺服器CPU使用量這兩個點。當伺服器CPU一直處於滿載的情況下,使用者就會感覺到網站的速度變慢。解決的方法之一,就是使用快取,像是將首頁整個存放在記憶體中,當使用者瀏覽時IIS就不用再重新產生網頁,或是將資料庫裡的資料或是程式用到的變數做快取,就不用一直對資料庫做存取及重新計算程式所用到的變數。
而本篇文章將針對Application Data Caching做說明。
雖然LINQ出來很長一段時間了,不過有些基本的東西要用時還是會想不起來,尤其XML比較少用到(應該說頻率很低),所以要用時常常會忘記,這篇文章算是做個筆記。
在上一篇文章在ASP.NET 4.0的WebForm專案使用Routing中,如果是像下列程式碼設定Routing規則:
這其實會有一些問題,假設使用者在輸入網址時漏掉了TestPath1後面的參數,執行結果就會像下列這樣。
解決的方法很簡單,只要設定預設值就好了。
執行結果。
ASP.NET MVC推出後,相信很多人對於其中的Routing功能印象深刻,因為它讓網址變得更簡潔,不像早期都得靠QueryString來傳遞參數。但是,傳統的ASP.NET WebForm專案卻沒辦法直接享受它的好處,話雖如此,也不代表WebForm專案就沒辦法使用Routing功能。
話說在測試Plurk API的時候,得到了一個錯誤訊息,但是為下列奇怪的字串:
"\u7cdf\u7cd5\uff0c\u770b\u8d77\u4f86\u767c\u751f\u4e86\u9810\u6599\u4e4b\u5916\u7684\u932f\u8aa4\uff0c\u8acb\u7b49\u4e00\u4e0b\u518d\u8a66\u770b\u770b\uff01"
在Google上查了一下,猜測應該是UTF8編碼的字串,原本是不打算理它,但想想還是嘗試還原這詭異的東西,最後以下列程式碼還原成功。
上列程式碼中的PrintlnYourself函式,是下列的Extension Method。
執行結果。
在學Ruby這個語言的時候,有接觸到下列的用法。
在陣列型態的變數,可以直接呼叫each方法,不用再照以往for loop的那種方式去做。於是我就很好奇C#有沒有類似的方法可以用…