Time of Update: 2018-12-07
比如有這樣兩個字串:var a = "a-b=c12";var b =
Time of Update: 2018-12-07
.NET 2.0中引入了1級透明度模型(但是僅在程式集內被強制),透明代碼是不可以訪問關鍵代碼的,即使是在同一個程式集內(或是在同一個類型裡),如下代碼:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Security;using System.Security.Permissions; //使用透明度模型層級1[assembly:
Time of Update: 2018-12-07
對於參數,需要使用Expression.Parameter建立ParameterExpression對象,注意需要在建立Lambda時傳入ParameterExpression數組才可以使參數有效。對於本地變數,首先Expression類型提供Variable方法,但是這個Variable方法返回的也是ParameterExpression,實際上他們內部建立的都是同一種ParameterExpression對象,唯一的區別是Parameter方法會考慮Type.IsByRef的情況,但是Var
Time of Update: 2018-12-07
在WMI查詢Win32_Process類型時,建立進程的使用者資訊(使用者名稱和網域名稱)是沒有包含在屬性列表中的,查了下MSDN,只有通過調用GetOwner(或者GetOwnerSid)方法才可以。(參考GetOwner方法:http://msdn.microsoft.com/en-us/library/aa390460(v=vs.85).aspx)這個方法有兩個out的參數,分別是使用者名稱和網域名稱,都是字串類型。 在.NET中,通過ManagementObject.InvokeMeth
Time of Update: 2018-12-07
C#中,我們一般情況下認為"+"操作符有兩種功能,一種是做算術加,一種是做字串的串連。今天看到一份文檔說,深入解析C#中兩個PLUS操作符執行的不同操作,想了想,也的確應該是這樣,IL代碼執行個體也表面這個觀點是正確的:我們先寫一小段測試代碼:namespace MSILTest{ class Program { static void Main(string[] args) { string a = "aaa";
Time of Update: 2018-12-07
反射Emit中的TypeBuilder.DefineMethod並沒有直接提供對泛型參數的支援。整體過程也不是一個簡單的方法調用就可以解決的,具體總結如下過程:調用沒有指定參數和傳回值類型的TypeBuilder.DefineMethod重載,得到MethodBuilder。 使用MethodBuilder.DefineGenericParameters方法來定義泛型參數的類型名稱,比如T,K,V……然後最終方法就是xxx<T, K, V>。
Time of Update: 2018-12-07
假設有這麼一個簡單的ConfigurationSection類型(只有一個Id屬性):class MySection : ConfigurationSection{ [ConfigurationProperty("id")] public int Id { get { return (int)this["id"]; } set { this["id"] = value; } } } 那麼你的設定檔只能這樣寫:<configuration&
Time of Update: 2018-12-07
MSDN的這篇文章有點講地不清楚:http://msdn.microsoft.com/en-us/library/s9ts558h.aspx 文中說的字串的COM調用預設封送形式是UnmanagedType.Bstr,而平台叫用的預設封送形式是UnmanagedType.LPTStr。這個LPTStr是和平台相關的,就是WinAPI中的TCHAR定義(98/Me是ANSI,NT/2000/XP/…是Unicode)。然後這一段落就結束了……是的,MSDN上面的這些說的都沒錯,但是它應該提一下平台
Time of Update: 2018-12-07
注意:運行代碼需要添加System.configuration.install.dll的引用。安裝配置類在System.Configuration.Install命名空間內。 TransactedInstaller就像資料庫中的Transaction(事務),整個過程要麼全部執行,要麼一點也不執行,這需要執行過程中一旦有不可修正的錯誤發生,要進行復原(還原)操作。而.NET中的安裝程式類:Installer類(System.Configuration.Install命名空間內)並沒有內建這樣的功
Time of Update: 2018-12-07
首先需要從內部瞭解一下枚舉(Enumeration),相信許多人已經知道了,當我們聲明一個這樣的枚舉類型:enum MyEnum{ AAA, BBB, CCC} 背後的IL是這樣的:.class private auto ansi sealed MyEnum extends [mscorlib]System.Enum{ .field public static literal valuetype Mgen.MyEnum AAA = int32(0) .field
Time of Update: 2018-12-07
我開始奢望使用內建方法快速解決這個問題,後來發現不太可能。首先無法使用C# 4.0的介面協變支援,因為協變只針對參考型別,而TKey和TElement的類型可能是實值型別的。其次整個架構對IGrouping沒有提供任何直接的輔助方法。那麼將就像將IGrouping<TKey, TElement>轉換成IGrouping<object,
Time of Update: 2018-12-07
主題是“在非UI線程中使用await”,不過如果讀者真想這麼做,我想先反問下讀者,為什麼你要在非UI線程中使用await?畢竟,需要執行的任務已經執行在一個Task中了,此時你只需要在UI線程中使用await來非同步等待執行Task線程,await會根據當前SynchronizationContext環境來執行後續代碼。這一切都是合情合理的。因此如果你的代碼中有在非UI線程中使用await,並且await後的代碼需要訪問UI的情況,考慮修正你的代碼。 當然探索技術的一大樂趣就是去考慮一些非通常情
Time of Update: 2018-12-07
寫程式時需要一個嵌套Dictionary類型,於是寫了個非常簡單的類型,叫他NDictionary類型。定義成員有: 既然是嵌套Dictionary,那麼他的鍵可以是任意長度的。注意雖然NDictionary是一個字典,但是無法繼承IDictionary<TKey, TValue>,因為他的每個值的鍵的長度是不固定的。所以NDictionary類型只執行IEnumerable<NKeyValuePair<TKey,
Time of Update: 2018-12-07
當前.NET Framework(.NET 4.0)的Process僅提供進程的記憶體工作集的擷取(通過WorkingSet64屬性),而沒有提供對私人工作集的擷取。注意在Windows Vista之後,Windows工作管理員的進程記憶體一項預設是顯示進程的私人工作集的,因此這一效能資料還是很重要的。 通過效能計數器Process類的WorkingSet – Private可以擷取進程的私人工作集。當然通過WorkingSet屬性也可以擷取工作集。另外Process類和效能計數器都有Peak
Time of Update: 2018-12-07
目錄1. 使用Windows Form的PowerStatus 2. 使用WMI 3. 使用Windows Vista新增的本地API 返回目錄1. 使用Windows Form的PowerStatus優點.NET原生態缺點沒有事件通知第一種最原生態的方法是使用Windows
Time of Update: 2018-12-07
兩年前我曾經寫過一篇講理解實值型別,參考型別的文章,主要是講常見的實值型別,參考型別的區別。但是這兩種類型的淵源不止那些,今天就說說實值型別線上程方面的原子性問題。目錄0. 概念闡述1. 使用Interlocked類型2. 使用參考型別來聲明3. 通過裝箱和拆箱4. 使用lock 返回目錄0.
Time of Update: 2018-12-07
最近看了一些C#和.NET的文章和例子代碼什麼的,感覺入門了,這裡發些牢騷,還準備一個水桶裝大家的口水,並用這些口水蒸包子。做 C++ 11年,有些感覺,感覺語言不外乎語言(佛家曰:看山不是是山),很是自詡。做了這麼久的C/C++,竟然是:驀然回首,伊人卻在燈火闌珊處。去年想過自己設計語言,參考了D, JAVA, C#, Ruby, PHP, Python
Time of Update: 2018-12-07
網上找的一個資料~ 跟大家分享一下!!使用.net的方法GetThumbnailImage產生的縮圖失真嚴重,這裡推薦一種不失真產生縮圖的方法。/// <summary>/// 獲得縮微圖/// </summary>/// <returns></returns> public bool GetThumbImg(){try{string imgpath; //原始路徑 if(imgsourceurl.IndexOf("\",0)<0)
Time of Update: 2018-12-07
在開發中,涉及圖片的處理經常需要用到WritableBitmap對象,這個對象可以直接作為資料來源賦值給Image控制項,但若要儲存這個對象,我們只能將其序列化儲存為一個圖片檔案,自然需要用到圖片的編解碼庫:將WritableBitmap儲存為圖片檔案WriteableBitmap^ wb =“您的源”;IBuffer^ buffer = wb->PixelBuffer;DataReader^ dataReader =
Time of Update: 2018-12-07
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Runtime.InteropServices;namespace WS{ public partial