Почему значения неявно конвертируются в string в C#?
у меня есть некоторые код:
int value = 5;
MessageBox.Show ( value );
и MessageBox.Show
жалуется, говоря:
"не удается преобразовать из 'int' в строку"
Кажется, я помню некоторые случаи, когда значения неявно преобразуются в строковые значения, но не могу их точно вспомнить.
в чем причина этого решения, что любое значение неявно конвертируется в строковые значения?
5 ответов
MessageBox.Show()
принимает только строку. Когда вы используете что-то вроде Debug.WriteLine
, Он принимает кучу различных типов объектов, включая object
, а затем называет ToString()
на этот объект. Вероятно, это то, что вы испытываете.
короткое решение (везде, где вам нужна строка):
MessageBox.Show(""+value);
но я бы предпочел ToString()
или String.Format()
в большинстве случаев.
чтобы ответить на часть "почему": потому что impicit преобразования могут быть опасными и могут подорвать безопасность типа."1" + 2 = "12"
не всегда то, что вы хотите/ожидаете.
по точной причине вам нужно будет спросить либо компиляторов C#, либо одного из парней .NET runtime.
однако в .NET framework или языке C# нет мест, где значения автоматически и неявно конвертируются в строки.
вы можете, однако, подумать о том, как работает конкатенация строк, но это работает только потому, что на string.Concat
метод, включая тот, который принимает объект.
в других слова, это позволено:
string s = "Hello there: " + 4;
другие методы в рамках также имеют множество перегрузок, таких как Debug.WriteLine и такие, где он легко примет ваше целое или десятичное число, преобразуют его в строку через вызов .ToString, а затем распечатать его.
однако это не что-то встроенное в string или int, а сам метод.
вы можете использовать string.Формат() функция что-то вроде
MassageBox.Show(StringFormat("{0}",value));
Если вам нужна дополнительная помощь о string.Формат см.: строку.Формат в C# не возвращает измененное значение int