#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
функции?