В VS / VB system.windows.forms.control заменяет модуль microsoft.vb.strings, у кого-нибудь раньше была эта проблема?

#vb.net #visual-studio

#vb.net #visual-studio

Вопрос:

Я внезапно получаю сообщение об ошибке в Visual Studio / VB, где system.windows.forms.control заменяет модуль microsoft.vb.strings, так что код, который вчера был в порядке, теперь выдает ошибку.

dim cat как string = «стадо кошек»

затемнить фрагмент как string = Left (cat, 4)

выдает ошибку слева: «Общедоступное свойство перегрузки, оставленное как целое число», не имеет параметров, и его возвращаемый тип не может быть проиндексирован.»

в то время как,

dim cat как string = «стадо кошек»

затемнить фрагмент как string = строки.Оставлено (cat, 4)

все в порядке. Я предполагаю, что он перегружен system.windows.forms.control.по какой-то причине оставлено свойство, и я не знаю, как это исправить или почему это происходит. Я полностью удалил и переустановил Visual Studio, переустановил .net framework, чтобы попытаться устранить проблему, но она все еще существует в новых пустых программах. Есть предложения?

Ответ №1:

Left неоднозначен; он существует как в классе String, так и в классе Form amp; поскольку код (предположительно) находится внутри формы, тогда выигрывает «самый локальный» Left .

Left сам по себе является пережитком VB6, и вам не следует его использовать (поведение, которое вы видите, задокументировано в примечаниях).

Переключитесь на:

 dim slice as string = cat.Substring(0, 4)
  

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

1. Спасибо, увидев ваше упоминание о «форме», я вспомнил, что я переместил код-нарушитель из модуля в класс form. Также полезно знать, что значение «Left» не указано. Я этого не знал.

2. Разве это не должно быть Dim slice As String = If(String.IsNullOrEmpty(cat), String.Empty, cat.Substring(0, Math.Min(cat.Length, 4))) для эмуляции Left функции?