.NET(C#):Regex的Match,Group,Capture類

這三個類都在System.Text.RegularExpressions命名空間內,他們互相保持繼承關係,如:我們從外往內講起(我覺得這樣更好理解些),首先Match類表示一個最終的匹配,一個正則不一定只有一個匹配,這個可以通過Match.NextMatch來嘗試下面的匹配。而Regex中的所有組(Group)可以通過Match的Groups屬性得到。組可以通過索引值得到,也可以通過名稱得到。(沒有名稱的組排在有名稱組的前面),不過注意的是所有組都是以1開始的。以0開始的那個組(Groups[0

.NET(C#):不使用建構函式來初始化對象 – FormatterService.GetUninitializedObject方法

FormatterService(在System.Runtime.Serialization命名空間內)的GetUninitializedObject方法是.NET還原序列化中CLR初始化對象用到的方法(眾所周知,還原序列化中對象的建構函式是不被調用的)。這個方法我們也可以直接使用來達到相同的效果。 如下代碼:using System;using System.Runtime.Serialization; namespace Mgen{    class a    {       

.NET(C#):將資料位元組大小轉換成易讀的單位字串

電腦中資料大小一般以位元組為單位,資料類型通常是long類型,轉換成易讀的單位字串,比如1024位元組就顯示1KB。1024*1024位元組則顯示1MB…… Google中搜尋了半天,在StackOverflow中找到一個好的答案:http://stackoverflow.com/questions/3758606/how-to-convert-byte-size-into-human-readable-format-in-java 不過是用Java寫的,把他改成C#:public

.NET(C#):Win32表單API封裝工程

 全部版本的原始碼下載: 注意:此為微軟SkyDrive存檔,請用瀏覽器直接下載,用某些下載工具可能無法下載  版本更新歷史:2.0增加了對擴充表單樣式(GWL_EXSTYLE標誌)的更好支援支援:增加WindowStylesEx枚舉定義。   1.0簡單的GetWindowLongPtr和SetWindowLongPtr封裝。具體介紹可以參考:.NET(C#) 平台叫用:不依賴平台的GetWindowLongPtr和SetWindowLongPtr API  

.NET(C#):3種方法寫出類似C/C++的指標作業碼

嘗試用3種.NET方法寫出下面的C/C++指標作業碼。注意所有.NET方法均不直接引用外部函數資源(DllImport),都是使用.NET中原生態提供的方法。注意:所有代碼輸出僅代表在32位和Little-Endian的CPU環境的運行結果。 來看這一段典型的C/C++指標作業碼:/***************************** C/C++ 代碼****************************/int i = 0xAA00FF;//i的記憶體儲存形式:FF 00 AA

.NET(C#):Regex的RegexOptions和行數

研究一下正則RegexOptions枚舉的三個針對匹配行的區別,對應None,SingleLine(單行)和Multiline(多行)枚舉值。 結論是:None:(.)匹配任何字元除了\n。^和$不起作用。 Singleline:(.)匹配任何字元。^和$匹配整個字串 Multiline:(.)匹配任何字元除了\n。^和$匹配每行的開頭和結尾。  另外貌似目前.NET的正則對\A和\Z支援的不是很好。下面測試代碼:(注意由於輸出字元中有分行符號,因此用ASCII碼作輸出)//+ using

.NET(C#):反射Emit產生結構體

在ModuleBuilder.DefineType方法中的TypeAttributes枚舉值中,只有Class和Interface,哪裡有Struct?呵呵,其實一個結構體就是繼承於ValueType的sealed類型。這段代碼:struct a{ } 將會被編譯成如下IL:.class private sequential ansi sealed beforefieldinit a    extends [mscorlib]System.ValueType{  

.NET(C#):在檔案存取控制清單中加入審核規則(Audit Rule)

如果你對Windows存取控制不瞭解的話,建議先看這篇文章: 淺談Windows存取控制在.NET(C#)中的實現(ACE, SD, DACL, SACL) 我們知道在系統存取控制清單(SACL)中,ACE是審核規則,.NET中System.Security.AccessControl命名空間內封裝了審核規則(Audit

.NET(C#):關於部屬程式集時的重新導向版本

  目錄1. 單個程式集配置重新導向2. 發行者策略程式集3. 開發測試中頻繁版本更新   返回目錄1. 單個程式集配置重新導向當單個依賴程式集,比如A,依賴程式集B,比如使用B的1.0版本。現在B從1.0升級到了2.0。那麼此時可以在程式集A中手動重新導向B的版本,這樣在程式集A運行後會自動使用更新的2.0版本的程式集B。 程式集的版本重新導向須寫在程式集自己的設定檔中(App.config)。在<configuration> – <runtime> –

.NET(C#):訊號量(Semaphore)的初始請求數和最大請求數

其實.NET中的訊號量(Semaphore)是作業系統維持的一個整數。當整數位0時。其他線程無法進入。當整數大於0時,線程可以進入。每當一個線程進入,整數-1,線程退出後整數+1。整數不能超過訊號量的最大請求數。訊號量在初始化的時候可以指定這個整數的初始值。 System.Threading.Semaphore類的建構函式的兩個參數第一個就是訊號量的內部整數初始值,也就是初始請求數,第二個參數就是最大請求數。如果沒有額外操作訊號量的話,訊號量的運行限制就取決於這個初始請求數,比如下面代碼://+

.NET(C#):兩個進程防止被終止

我們知道,AppDomain.ProcessExit能監視當前進程的退出,而Process.Exited事件只能監視其他進程的退出。而且如果進程被強制結束AppDomain.ProcessExit不會發生的。綜上事實,我們可以用兩個進程互相監視另一個進程的Process.Exited事件來,然後如果一個進程被結束,另一個進程會重新開啟這個程式。 比如樣本中兩個程式,mgen_p1,和mgen_p2。一個程式結束後,另一個程式會馬上重新運行被結束的程式。當然如果兩個程式同時被結束,那麼他們會被徹底

.NET(C#):DLR有趣的調用自己的動態對象

一個動態對象竟然支援自己調用自己,根據MSDN的解釋,此項功能僅在C#中被支援,VB並不可以。具體過程則是改寫動態對象(DynamicObject類)的TryInvoke方法。和普通函數調用的TryInvokeMember方法類似。TryInvoke的第一個參數是Binder:InvokeBinder。但是和TryInvokeMember的InvokeMemberBinder不一樣,它沒有Name屬性,因為對象自己調用自己自然沒有方法名稱。其他屬性不需要多說明,CallInfo代表調用資訊。Re

.NET(C#):使用HttpWebRequest頭中的Range下載檔案片段

HTTP請求包頭資訊中有一個Range屬性可以指定索取部分HTTP請求的檔案。在.NET中則通過HttpWebRequest.AddRange方法來定義資料的範圍。當添加了Range屬性的HTTP請求發送後,如果伺服器支援該請求,也就是說支援部分資料提取(也是我們常說到的支援斷點續傳的下載,所謂斷點續傳的下載就是用一個Range屬性來指定沒有下載到的範圍),那麼伺服器會返回Partial Content狀態值。否則會返回OK狀態值(200代碼)。注意如果伺服器支援Range但是HTTP

.NET(C#):從檔案中覺察編碼

今天遇到一個問題,需要從根據一個檔案嘗試擷取其文本編碼。不是很難呵呵,無非就是根據前幾個位元組判斷字元順序標記(BOM),如果檔案不包含BOM的話,返回一個預設值。 代碼:/// <summary>/// 根據檔案嘗試返回字元編碼/// </summary>/// <param name="file">檔案路徑</param>/// <param name="defEnc">沒有BOM返回的預設編碼</param>/// &

.NET(C#):警惕PLINQ結果的無序性

PLINQ的運行結果是無序的,也就是不保持原來集合的順序來操作(當然除了一些專門的排序操作)。原因則是線程的並發執行本來就充滿了不確定性,把原來一個任務分割成好幾個部分同時進行返回的結果會打亂原來的順序,如果要強制保留順序,肯定要浪費一些效能,PLINQ是可以這樣的,但預設不這樣。 先看一個LINQ樣本:var arr = new int[] { 1, 2, 3, 4, 5 };var res = arr.Where(i => i != 3);結果是:1, 2, 4,

.NET(C#) TPL:Parallel迴圈和多個Task的異常處理

和for/foreach中發生異常的表現一樣,Parallel迴圈中的任何異常都會使整個迴圈終止,注意由於整個迴圈是分塊同時進行的,因此整個迴圈不會立即終止(如果有一個線程進行中長時間工作的話,而且是發生在CancellationToken的ThrowIfCancellationRequested方法之後)。 代碼:try{    Parallel.For(0, 5, (i) =>    {        throw new Exception("異常。迭代數字:" + i);    })

.NET(C#) TPL:Task, Parallel, PLINQ中取消操作後的OperationCanceledException異常

更新:在C# 5.0後,await所產生的取消Task異常會直街拋出異常。比如下面的代碼,在C# 5.0/.NET 4.5中等效於:var src = new CancellationTokenSource();src.CancelAfter(100);try{    await Task.Factory.StartNew(() =>    {        Thread.Sleep(1000);        src.Token.ThrowIfCancellationRequested(

.NET(C#) TPL:Task中未覺察異常和TaskScheduler.UnobservedTaskException事件

當你在一個Task執行中拋出異常,比如:Task.Factory.StartNew(() =>{    throw new Exception();});運行該方法,沒有任何異常拋出。 事實上此時Task的異常處於未覺察狀態,這個未覺察狀態的異常會在記憶體回收時終結器執行線程中被拋出。為了誘發這個異常,我們可以通過GC.Collect來強制記憶體回收從而引發終結器處理線程,此時Task的未覺察異常會被拋出。//在Task中拋出異常Task.Factory.StartNew(() =>

.NET(C#):DebuggerDisplay特性碉堡了!

這個特性太碉堡了,很像WPF中的資料繫結,當然本質就是Visual Studio在調試時利用反射擷取對象的值。 建構函式中的屬性值(就是{}中的內容)不僅僅可以是簡單的屬性值。還可以是索引器,而且這一切可以嵌套。(DebuggerDisplay特性(DebuggerDisplayAttribute類型)在System.Diagnostics命名空間內) 來定義一個有DebuggerDisplay的類:   

.NET(C#):ConcurrentBag同線程元素的添加和刪除

ConcurrentBag<T>對於同一個線程值的添加和刪除是非常快的,因為ConcurrentBag內部將資料按線程的標識而隔離儲存區 (Isolated Storage),所以一個線程從自己的資料中移除一個資料是非常快的,當然如果這個線程中沒有資料,那麼只能從其他線程中移除資料,此時會發生一些效能損耗從而確保安全執行緒! 比如從線程1中加入兩個資料,線上程2中加入一個資料。那麼當線程2調用TryTake時,被移除的資料肯定是線程2加入的那個資料://+ using System.

總頁數: 4314 1 .... 452 453 454 455 456 .... 4314 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.