2011-05-19 198 views

回答

6

看起來像C#相當於將

var MyKeyChr = char.ConvertFromUtf32((int) e.KeyCode) 

但是,e.KeyCode不包含Unicode代碼點,所以此轉換沒有意義。

17

ChrW C#中的快速和骯髒的等效值只是鑄造char

char MyKeyChr = (char)e.KeyCode; 

的時間更長,更具表現力的版本是使用轉換類之一,而不是像System.Text.ASCIIEncoding

或者你甚至可以通過導入Microsoft.VisualBasic命名空間在C#中使用實際的VB.NET函數。如果你依靠引擎蓋下的ChrW方法進行的某些特殊檢查,那麼這真的是非常必要的,你可能不應該依賴這些方法。該代碼會是這個樣子:

char MyKeyChr = Microsoft.VisualBasic.Strings.ChrW(e.KeyCode); 

然而,這不能保證產生你想要什麼在這種情況下(也不是原碼)。枚舉Keys中的所有值都不是ASCII值,因此不是所有值都可以直接轉換爲字符。特別是鑄造Keys.NumPad1等。人。到char不會產生正確的值。

+1

這不是直接的等價物。 VB.Net版本處理某些直接轉換不會的邊界情況(例如,'char'範圍之外)。邊界情況是肯定的,但演員陣容不是直接相當的 – JaredPar 2011-05-19 14:59:39

+0

@Jared:一個公平點,我總是忘記一些額外的行爲。答案固定。 – 2011-05-19 15:02:57

3

最文學的方式來翻譯的代碼是使用從C#

MyKeyChr = Microsoft.VisualBasic.Strings.ChrW(e.KeyCode); 

的VB.Net運行時函數如果你想避免在VB.Net運行時的依賴性,雖然你可以使用這個下調版本

MyKeyChr = Convert.ToChar((int) (e.KeyCode & 0xffff)); 
+0

您的短語使其聽起來像VB.NET運行時的方式與C#運行時完全獨立的運行時環境。 'Microsoft.VisualBasic'只是BCL中的一個類。在C#程序中使用它並不會真正添加額外的依賴項;無論如何,編譯器將完全質量所有導入的參考。 – 2011-05-19 15:06:21

+0

@Cody在談論'Microsoft.VisualBasic.dll'時經常會涉及到一些細節。從VB.Net的角度來看,它是一個運行時DLL(在文檔和用戶頭腦中)。該語言對該DLL中的行爲有很大的運行時依賴性。它的部分內容與底層語言語義是分不開的。但是,當考慮諸如 「.Net運行時」之類的術語時,可能會引起混淆。請注意,儘管C#的動態支持4.0程序集在許多文檔中也被稱爲C#運行時DLL。 – JaredPar 2011-05-19 15:40:07

+0

@Cody是的,它只是另一個DLL,但它有一組依賴關係,許多人根本無法從通常所知的語言運行時期望這些依賴關係。例如它取決於'System.Windows.Forms'和'System.Management'。 – JaredPar 2011-05-19 15:41:36

相關問題