Это прекрасный пример того, почему вы должны иметь Option Strict On
. Здесь вы используете конструктор String
:
DataGridView_displayfigures.Rows.Add(New String({AssignRuns.batsman1A}))
Но это определенно не то, что вы собираетесь. Вы передаете массив String
в качестве аргумента, но нет конструктора String
, который имеет параметр типа String
array. С Option Strict On
это приведет к синтаксической ошибке, и ваш код не сможет скомпилироваться, пока вы не исправите ее.
С Option Strict Off
компилятор ищет конструктор, который достаточно похож, чтобы он мог массировать ваш код работать. В этом случае он использует тот, который имеет параметр типа Char
массив. Этот конструктор создает String
, содержащий все значения Char
из массива.
В вашем случае каждый String
в вашем массиве преобразуется в Char
, просто беря первый символ в каждом String
. Ваш массив содержит только один String
, поэтому в конструктор передается только один Char
, поэтому создаваемое String
содержит только один символ.
Кроме того, перегрузка этого не происходит Add
метод, который принимает один String
либо. Однако есть тот, который принимает массив Object
, поэтому вы должны передать его:
DataGridView_displayfigures.Rows.Add(New Object() {AssignRuns.batsman1A})
Это также сработает:
DataGridView_displayfigures.Rows.Add({AssignRuns.batsman1A})
Технически передающий String
массив для метода Add
, но это разрешено, потому что это расширяющее преобразование, т.е. никакие данные не могут быть потеряны. Преобразование String
в Char
является сужающим преобразованием, поскольку данные могут быть потеряны, как это было в исходном коде. Option Strict On
допускает неявные расширяющие преобразования, но не неявные сужающие преобразования.
РЕДАКТИРОВАТЬ:
На самом деле, думая об этом последнем фрагменте кода и о том, что вы можете передать массив String
непосредственно Add
заставляет меня думать, что, возможно, ваша ошибка состояла в том, что вы просто неправильно поместили одну закрывающую скобку, потому что вместо этого:
DataGridView_displayfigures.Rows.Add(New String({AssignRuns.batsman1A}))
вы могли бы иметь это:
DataGridView_displayfigures.Rows.Add(New String() {AssignRuns.batsman1A})
Перемещение этого закрытия Скобки означают, что вы обозначаете массив String
и затем инициализируете его, а не передаете литеральный массив String
в качестве аргумента конструктору.