.NET(C#):覺察XML還原序列化中的未知節點

眾所周知XML是可以擴充的,XML的元素可以靠名稱識別而不是只按照未知識別。在XML還原序列化的時候只要需要的資訊存在就可以成功將XML資料轉化成還原序列化後的對象。但是這並不代表著用來還原序列化的XML資料就一定是序列化的標準結果。有些時候XML資料會有多餘冗長資訊,這個在還原序列化的過程中預設是不會被覺察到的。 XmlSerializer類型有三個事件可以覺察到未知XML節點:UnknownNode,UnknownElement和UnknownAttribute。分別對應未知節點,未知元素和

.NET(C#):程式集配置的元素和元素

這兩個元素都在<configuration> – <runtime> – <assemblyBinding>元素下。 <probing>元素指定CLR探索程式集的子目錄,這個目錄是相對應用程式定義域的基目錄。(可以參考這篇文章:.NET(C#):

.NET(C#):使用ObjectSecurity.SetAccessRuleProtection保留存取控制資料

由於Windows存取控制是可以被繼承的,所以當一個安全性實體從一個位置被移動到另一個位置,他的存取控制是可能因此而被影響的。為了能夠讓一個安全性實體的存取控制保持現有資料而又不會因為路徑改變而繼承目標路徑的控制選項。可以使用ObjectSecurity.SetAccessRuleProtection方法。注意ObjectSecurity類型在System.Security.AccessControl命名空間內,並有ObjectSecurity還有SetAuditRuleProtection方法

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

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

.NET(C#):靈活運用CryptoStream,加密不是必須用CryptoStreamMode.Write

首先.NET中的ICryptoTransform是單向的,也就是只能從一個狀態將資料轉化成另一個狀態,反之是不可以的。當然手動操作ICryptoTransform還是比較繁瑣的,通過CryptoStream可以更輕鬆地操作一個ICryptoTransform。由於ICryptoTransform是單向的,所以加密解密這兩個過程就需要兩個ICryptoTransform,這個通過SymmetricAlgorithm類的CreateEncryptor和CreateDecryptor方法來建立。而用C

.NET(C#):CryptoStream混亂的方法命名:Flush/FlushFinalBlock/Clear/Close…

CryptoStream的成員方法確實有些混亂,細細研究一下,其實也不是特別混亂,也算符合.NET中的某些命名規則吧。先說Flush相關的,感覺這個更重要些。 首先從Stream類繼承來的Flush方法並沒有執行流的Flush操作,CryptoStream改寫基類的Flush方法為空白: 而CryptoStream自己的FlushFinalBlock才進行所謂的Flush操作(難道微軟想用這種方式提醒開發人員CryptoStream的Flush操作很重要嗎?),這個操作會將內部緩衝區的資料進行寫

.NET(C#):Emit建立異常處理代碼

目錄Emit異常處理流程 顯示Exception對象的Message屬性   返回目錄 Emit異常處理流程來看這種C#異常處理代碼:static void doo(Exception e){    try    {        throw e;    }    catch (ApplicationException ex)    {        Console.WriteLine("捕獲ApplicationException");    }    catch    {       

.NET(C#)平台叫用:DllImportAttribute.CharSet和字串封送編碼

首先如果您看下面代碼有些費解的話,推薦先閱讀以下MSDN上關於平台叫用的指定字元集文章:http://msdn.microsoft.com/zh-cn/library/7b93s42f.aspx 學習.NET(C#)的平台叫用和對象封送,你會發現其實同樣的系統API函數的平台叫用定義可以有多種形式的,本文就拿WinAPI的MessageBox開涮。首先通過DllImportAttribute.CharSet來自動指定名稱探索(根據DllImportAttribute.ExactSpelling)

.NET(C#) :關於開關(Switch類)的Value和SwitchSetting屬性

System.Diagnostics.Switch類的Value和SwitchSettings屬性是protected修飾符,並且是可以設定的。Value是字串類型,SwitchSetting是int類型。Switch類的值是Value屬性,當值被設定後,Switch會嘗試將Value字串轉換成SwitchSetting的數字。如果無法成功轉換,異常將會被拋出。 當自訂Switch類時,可以改寫OnValueChanged和OnSwitchSettingChanged方法來自訂Value屬性和S

.NET(C#):修改調試或追蹤中預設的斷言(Assert)的表現

注意:以Trace類做樣本,但Debug類也通用。 Trace.Listeners預設是一個System.Diagnostics.DefaultTraceListener類型,這個類型的接聽程式會在斷言時彈出一個對話方塊,如下代碼://+ using System.Diagnostics;Trace.Assert(false,

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

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

.NET(C#):不使用SMTP的25連接埠發郵件的許可權檢查

當不使用SMTP的25連接埠號碼發送郵件,某些低許可權執行環境可以會拋出異常,最好還是在執行操作前進行許可權的檢查。 SMTP在.NET中對應的許可權是:SmtpPermission類型(還有聲明式的SmtpPermissionAttribute特性,他們都在System.Net.Mail命名空間下)。他的Access屬性控制許可權的內容。對應一個SmtpAccess枚舉。有3個值:None(沒有),Connect(串連預設連接埠25),ConnectToUnrestrictedPort(串連任

.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#):兩個進程防止被終止

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

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

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

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

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

.NET(C#) TPL:ParallelLoopState的Break方法和LowestBreakIteration屬性

首先當Break被調用後,迴圈中當前調用Break的執行後的迭代就沒有必要去執行了,由於並存執行打亂了執行順序,所以這個時候很可能某些不需要執行的迭代已經執行完了,這個沒辦法(也沒必要)去取消它,當然調用Break後沒有必要執行且沒有開始執行的迭代最終不會被執行。 上面只討論了“已經執行完”和“沒有執行的狀況”,對於正在執行的卻沒有必要執行的迭代,同樣沒辦法將他停止,此時ParallelLoopState.LowestBreakIteration(類型是long?,預設是null)則會成為最小的

.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#):DebuggerDisplay特性碉堡了!

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

總頁數: 4314 1 .... 1391 1392 1393 1394 1395 .... 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.