在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
等强制转换为char
将不能产生正确的值。
看起来C#的等效语句应该是
var MyKeyChr = char.ConvertFromUtf32((int) e.KeyCode)
e.KeyCode
不包含 Unicode 代码点,因此这种转换是没有意义的。MyKeyChr = Microsoft.VisualBasic.Strings.ChrW(e.KeyCode);
MyKeyChr = Convert.ToChar((int) (e.KeyCode & 0xffff));
Microsoft.VisualBasic
只是 BCL 中的一个类。从 C# 程序中使用它并不会增加额外的依赖;编译器将完全限定所有导入的引用。 - Cody GrayMicrosoft.VisualBasic.dll
经常涉及到术语的微妙差别。从 VB.Net 的角度来看,它是一个运行时 DLL(在文档和用户心中)。该语言在该 DLL 中具有重要的运行时依赖性。其中一些部分与底层语言语义简直是不可分割的。但是,在考虑诸如“ .Net 运行时”之类的术语时可能会令人困惑。请注意,C# 的 4.0 版本用于动态支持的程序集在许多文档中也被称为 C# 运行时 DLL。 - JaredParChrW(&H[YourCharCode])
的C#等效写法是Strings.ChrW(0x[YourCharCode])
您可以使用https://converter.telerik.com/在VB和C#之间进行转换。
以下代码可将 VB 转换为 C#:
e.KeyChar = Microsoft.VisualBasic.ChrW(13)
转换为:
e.KeyChar == Convert.ToChar(13)
char
范围)。虽然这些是边界情况,但强制转换并不是直接等价的。 - JaredPar