Не удалось инициализировать массив шестнадцатеричных чисел: «Ключевое слово не называет тип»

#arrays #vb.net #initialization

#массивы #vb.net #инициализация

Вопрос:

Я пытаюсь инициализировать массив шестнадцатеричных чисел таким образом:

 Module VBModule
    Sub Main()
        Console.WriteLine("Hello World")
        Dim someArray As Variant
        someArray = Array(amp;H11, amp;H22, amp;H33)
        
    End Sub
End Module
  

Я использую этот веб-сайт для его запуска, и я получаю сообщение об ошибке:

 Visual Basic.Net Compiler version 0.0.0.5943 (Mono 4.6 - tarball)
Copyright (C) 2004-2010 Rolf Bjarne Kvinge. All rights reserved.
/home/main.vb (11,29) : error VBNC30180: Keyword does not name a type.
/home/main.vb (12,14): Compiler error around this location, the compiler hasn't implemented the error message, nor error recovery, so the compiler will probably crash soon.
  at vbnc.Helper.ErrorRecoveryNotImplemented (vbnc.Span Location) [0x00000] in <cd55155bc3b542a49b0b2bb7e08ded22>:0 
  at vbnc.Parser.ParseVariableDeclarator (vbnc.ParsedObject Parent, vbnc.Modifiers Modifiers, vbnc.ParseAttributableInfo Info, System.Collections.IList result, System.Boolean local) [0x00000] in <cd55155bc3b542a49b0b2bb7e08ded22>:0 
  at vbnc.Parser.ParseLocalVariableDeclarator (vbnc.ParsedObject Parent, vbnc.Modifiers Modifiers, vbnc.ParseAttributableInfo Info) [0x00000] in <cd55155bc3b542a49b0b2bb7e08ded22>:0 
  at vbnc.Parser.ParseLocalVariableDeclarators (vbnc.ParsedObject Parent, vbnc.Modifiers Modifiers, vbnc.ParseAttributableInfo Info) [0x00000] in <cd55155bc3b542a49b0b2bb7e08ded22>:0 
  at vbnc.Parser.ParseLocalDeclarationStatement (vbnc.CodeBlock Parent) [0x00000] in <cd55155bc3b542a49b0b2bb7e08ded22>:0 
  at vbnc.Parser.ParseCodeBlock (vbnc.ParsedObject Parent, System.Boolean IsOneLiner) [0x00000] in <cd55155bc3b542a49b0b2bb7e08ded22>:0 
  at vbnc.Parser.ParseSubDeclaration (vbnc.TypeDeclaration Parent, vbnc.ParseAttributableInfo Info) [0x00000] in <cd55155bc3b542a49b0b2bb7e08ded22>:0 
  at vbnc.Parser.ParseTypeMembers (vbnc.TypeDeclaration Parent) [0x00000] in <cd55155bc3b542a49b0b2bb7e08ded22>:0 
  at vbnc.Parser.ParseModuleDeclaration (vbnc.ParsedObject Parent, vbnc.Attributes Attributes, System.String Namespace) [0x00000] in <cd55155bc3b542a49b0b2bb7e08ded22>:0 
  at vbnc.Parser.ParseTypeDeclaration (vbnc.ParsedObject Parent, vbnc.Attributes Attributes, System.String Namespace) [0x00000] in <cd55155bc3b542a49b0b2bb7e08ded22>:0 
  at vbnc.Parser.ParseAssemblyMembers (vbnc.AssemblyDeclaration Parent, System.String RootNamespace) [0x00000] in <cd55155bc3b542a49b0b2bb7e08ded22>:0 
  at vbnc.Parser.ParseAssemblyDeclaration (System.String RootNamespace, vbnc.AssemblyDeclaration assembly) [0x00000] in <cd55155bc3b542a49b0b2bb7e08ded22>:0 
  at vbnc.Parser.Parse (System.String RootNamespace, vbnc.AssemblyDeclaration assembly) [0x00000] in <cd55155bc3b542a49b0b2bb7e08ded22>:0 
  at vbnc.Compiler.Compile_Parse () [0x00000] in <cd55155bc3b542a49b0b2bb7e08ded22>:0 
  at vbnc.Compiler.Compile () [0x00000] in <cd55155bc3b542a49b0b2bb7e08ded22>:0 
  at vbnc.Compiler.Compile (System.String[] CommandLine) [0x00000] in <cd55155bc3b542a49b0b2bb7e08ded22>:0 
  at vbnc.Main.Main (System.String[] CmdArgs) [0x00000] in <cd55155bc3b542a49b0b2bb7e08ded22>:0 
There were 1 errors and 0 warnings.
Compilation took 00:00:02.3128040
  

Что я делаю не так?

Комментарии:

1. Variant не является типом данных в VB.NET . VBA не VB.NET .

2. Потому что это vb.net не то же самое, что vba .

Ответ №1:

Такого понятия, как шестнадцатеричное число как таковое, в VB.NET . Шестнадцатеричный — это просто способ представления литеральных значений целого типа, т.Е. Byte , Short , Integer или Long . Если вам нужен массив Integer значений, то это то, что вам нужно создать:

 Dim someArray As Integer() = {amp;H11, amp;H22, amp;H33}
  

С Option Infer On , которым оно является по умолчанию, вы также можете разрешить вывод типа:

 Dim someArray = {amp;H11, amp;H22, amp;H33}
  

В обоих случаях переменная теперь ссылается на массив, содержащий значения 17, 34 и 51. Это просто числа, а не шестнадцатеричные числа. Вы могли бы использовать десятичные или восьмеричные литералы, чтобы получить точно такой же массив. Шестнадцатеричные числа часто наиболее полезны для представления Byte значений, где две цифры могут представлять полный диапазон значений от 0 до 255:

 Dim someArray As Byte() = {amp;H11, amp;H22, amp;H33}
  

В этом случае вам нужно будет явно указать тип массива, поскольку вывод типа приведет к Integer массиву. Чтобы использовать вывод типа, вам пришлось бы использовать более подробный и, следовательно, бессмысленный маршрут:

 Dim someArray = {CByte(amp;H11), CByte(amp;H22), CByte(amp;H33)}