【发布时间】:2011-08-28 23:15:45
【问题描述】:
在 VB.NET 2008 中,我使用了以下语句:
MyKeyChr = ChrW(e.KeyCode)
现在我想把上面的语句转换成C#。
有什么想法吗?
【问题讨论】:
标签: c# vb.net char keycode vb.net-to-c#
在 VB.NET 2008 中,我使用了以下语句:
MyKeyChr = ChrW(e.KeyCode)
现在我想把上面的语句转换成C#。
有什么想法吗?
【问题讨论】:
标签: c# vb.net char keycode vb.net-to-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 不会产生正确的值。
【讨论】:
char 的范围之外)。可以肯定的是边界情况,但演员表不是直接等价的
看起来 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));
【讨论】:
Microsoft.VisualBasic 只是 BCL 中的一个类。在 C# 程序中使用它并不会真正增加额外的依赖。无论如何,编译器都会完全质量所有导入的引用。
Microsoft.VisualBasic.dll 经常涉及到细线。从 VB.Net 的角度来看,它是一个运行时 DLL(在文档和用户心中)。该语言对该 DLL 中的行为具有严重的运行时依赖性。它的一部分与底层的语言语义根本分不开。但是,是的,在考虑“.Net 运行时”之类的术语时,它可能会令人困惑。请注意,尽管 C# 用于动态支持的 4.0 程序集在许多文档中也称为 C# 运行时 DLL。
System.Windows.Forms 和System.Management。
ChrW(&H[YourCharCode]) 的 C# 等效项是 Strings.ChrW(0x[YourCharCode])
您可以使用https://converter.telerik.com/ 在 VB 和 C# 之间进行转换。
【讨论】: