【问题标题】:What is the C# equivalent of ChrW(e.KeyCode)?ChrW(e.KeyCode) 的 C# 等价物是什么?
【发布时间】:2011-08-28 23:15:45
【问题描述】:

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

MyKeyChr = ChrW(e.KeyCode)

现在我想把上面的语句转换成C#。

有什么想法吗?

【问题讨论】:

    标签: c# vb.net char keycode vb.net-to-c#


    【解决方案1】:

    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 不会产生正确的值。

    【讨论】:

    • 这不是直接的等价物。 VB.Net 版本可以处理直接强制转换无法处理的某些边界情况(例如,在char 的范围之外)。可以肯定的是边界情况,但演员表不是直接等价的
    • @Jared:公平地说,我总是忘记一些额外的行为。答案固定。
    【解决方案2】:

    看起来 C# 等价物是

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

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

    【讨论】:

    • 它为代码 140 返回不同的值。在 Vb Chrw(140) 中返回 Œ 但在 C# 中返回空。应该使用什么来获得相同的值?
    【解决方案3】:

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

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

    如果你想避免对 VB.Net 运行时的依赖,尽管你可以使用这个精简版

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

    【讨论】:

    • 听起来像是 VB.NET 运行时的措辞方式是一个完全独立于 C# 运行时的运行时环境。 Microsoft.VisualBasic 只是 BCL 中的一个类。在 C# 程序中使用它并不会真正增加额外的依赖。无论如何,编译器都会完全质量所有导入的引用。
    • @Cody 谈论Microsoft.VisualBasic.dll 经常涉及到细线。从 VB.Net 的角度来看,它是一个运行时 DLL(在文档和用户心中)。该语言对该 DLL 中的行为具有严重的运行时依赖性。它的一部分与底层的语言语义根本分不开。但是,是的,在考虑“.Net 运行时”之类的术语时,它可能会令人困惑。请注意,尽管 C# 用于动态支持的 4.0 程序集在许多文档中也称为 C# 运行时 DLL。
    • @Cody 是的,它只是另一个 DLL,但它具有许多人根本不期望从通常称为语言运行时的依赖项。例如,它依赖于System.Windows.FormsSystem.Management
    【解决方案4】:

    ChrW(&H[YourCharCode]) 的 C# 等效项是 Strings.ChrW(0x[YourCharCode])

    您可以使用https://converter.telerik.com/ 在 VB 和 C# 之间进行转换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-08
      • 1970-01-01
      • 1970-01-01
      • 2011-01-19
      • 2010-12-07
      • 2010-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多