Почему значения неявно конвертируются в 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


попробовать

MessageBox.Show(value.ToString());