Ответ 1
Похоже, эквивалент С# будет
var MyKeyChr = char.ConvertFromUtf32((int) e.KeyCode)
Однако e.KeyCode
не содержит кодовой код Unicode, поэтому это преобразование бессмысленно.
В VB.NET 2008 я использовал следующую инструкцию:
MyKeyChr = ChrW(e.KeyCode)
Теперь я хочу преобразовать вышеуказанный оператор в С#.
Любые идеи?
Похоже, эквивалент С# будет
var MyKeyChr = char.ConvertFromUtf32((int) e.KeyCode)
Однако e.KeyCode
не содержит кодовой код Unicode, поэтому это преобразование бессмысленно.
Быстрый и грязный эквивалент 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
не приведет к правильному значению.
Наиболее буквальным способом перевода кода является использование функции времени выполнения VB.Net из С#
MyKeyChr = Microsoft.VisualBasic.Strings.ChrW(e.KeyCode);
Если вы хотите избежать зависимости от времени выполнения VB.Net, вы можете использовать эту сокращенную версию
MyKeyChr = Convert.ToChar((int) (e.KeyCode & 0xffff));