什么是ChrW的C#等价物(e.KeyCode)?

在VB.NET 2008中,我使用了以下语句:

MyKeyChr = ChrW(e.KeyCode) 

现在我想将上面的语句转换为C#。

有任何想法吗?

看起来像C#等价物

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

但是, e.KeyCode不包含Unicode代码点,因此这种转换毫无意义。

C#中ChrW的快速等价只是将值转换为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不会产生正确的值。

翻译代码的最直接的方法是使用C#的VB.Net运行时函数

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

如果你想避免依赖VB.Net运行时,你可以使用这个修剪版本

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