在 VB.NET 2008 中,我使用了以下语句:
MyKeyChr = ChrW(e.KeyCode)
现在我想把上面的语句转换成 C#。
有任何想法吗?
在 VB.NET 2008 中,我使用了以下语句:
MyKeyChr = ChrW(e.KeyCode)
现在我想把上面的语句转换成 C#。
有任何想法吗?
在 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
等。人。tochar
不会产生正确的值。
看起来 C# 等价物是
var MyKeyChr = char.ConvertFromUtf32((int) e.KeyCode)
但是,e.KeyCode
它不包含 Unicode 代码点,因此这种转换是没有意义的。
翻译代码最直接的方法是使用 C# 中的 VB.Net 运行时函数
MyKeyChr = Microsoft.VisualBasic.Strings.ChrW(e.KeyCode);
如果您想避免对 VB.Net 运行时的依赖,尽管您可以使用这个精简版
MyKeyChr = Convert.ToChar((int) (e.KeyCode & 0xffff));
的 C# 等价物ChrW(&H[YourCharCode])
是Strings.ChrW(0x[YourCharCode])
您可以使用https://converter.telerik.com/在 VB 和 C# 之间进行转换。