Что такое эквивалент С# для ChrW (e.KeyCode)?

В VB.NET 2008 я использовал следующую инструкцию:

MyKeyChr = ChrW(e.KeyCode)

Теперь я хочу преобразовать вышеуказанный оператор в С#.

Любые идеи?

Ответы

Ответ 1

Похоже, эквивалент С# будет

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

Однако e.KeyCode не содержит кодовой код Unicode, поэтому это преобразование бессмысленно.

Ответ 2

Быстрый и грязный эквивалент ChrW в С# просто отличает значение char:

char MyKeyChr = (char)e.KeyCode;

Более длинная и более выразительная версия - это использовать один из классов преобразования, например System.Text.ASCIIEncoding.

Или вы даже можете использовать фактическую функцию VB.NET в С#, импортируя пространство имен Microsoft.VisualBasic. Это действительно необходимо, только если вы полагаетесь на некоторые специальные проверки, выполненные методом ChrW под капотом, которые вы, вероятно, не должны рассчитывать в любом случае. Этот код будет выглядеть примерно так:

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

Однако это не гарантирует, что вы получите именно то, что вы хотите в этом случае (и ни один из них не был исходным кодом). Не все значения в перечислении Keys являются значениями ASCII, поэтому не все из них могут быть напрямую преобразованы в символ. В частности, литье Keys.NumPad1 et. и др. до char не приведет к правильному значению.

Ответ 3

Наиболее буквальным способом перевода кода является использование функции времени выполнения VB.Net из С#

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

Если вы хотите избежать зависимости от времени выполнения VB.Net, вы можете использовать эту сокращенную версию

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