Почему значения неявно преобразуются в строку в C #? - PullRequest
9 голосов
/ 01 апреля 2011

У меня есть какой-то код вроде:

int value = 5;
MessageBox.Show ( value );

и MessageBox.Show жалуется, говоря:

"не может преобразовать из 'int' в 'строку'"

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

В чем причина такого решения, что любое значение неявно не являетсяконвертируется в строковые значения?

Ответы [ 5 ]

18 голосов
/ 01 апреля 2011

MessageBox.Show() принимает только строку. Когда вы используете что-то вроде Debug.WriteLine, он принимает несколько различных типов объектов, включая object, а затем вызывает ToString() для этого объекта. Это, вероятно, то, что вы испытываете.

12 голосов
/ 01 апреля 2011

Краткое решение (везде, где вам нужна строка):

 MessageBox.Show(""+value);

Но я бы предпочел ToString() или String.Format() в большинстве случаев.

Чтобы ответить на "Почему "часть: потому что неявные преобразования могут быть опасными и могут подорвать безопасность типов.
"1" + 2 = "12" = 12, не всегда то, что вы хотите или ожидаете.

3 голосов
/ 01 апреля 2011

По точной причине вам нужно было бы спросить либо ребят из компилятора C #, либо одного из ребят из среды выполнения .NET.

Однако в среде .NET или на языке C # нет мест, гдезначения автоматически и неявно преобразуются в строки.

Можно, однако, подумать о том, как работает конкатенация строк, но это работает только потому, что существует много перегрузок в методе string.Concat, включая тот, который принимаетобъект.

Другими словами, это разрешено:

string s = "Hello there: " + 4;

Другие методы в среде также имеют много перегрузок, таких как Debug.WriteLine и т. д., где это будет легкопримите ваше целое или десятичное число, преобразуйте его в строку с помощью вызова .ToString, а затем напечатайте его.

Однако это не что-то встроенное в строку или int, а сам метод.

1 голос
/ 01 апреля 2011

Вы можете использовать функцию String.Format (), например,

MassageBox.Show(StringFormat("{0}",value));

Если вам нужна дополнительная помощь по String.Format, смотрите: String.Format в C # не возвращает измененное значение int

0 голосов
/ 01 апреля 2011

Попробуйте

MessageBox.Show(value.ToString());
...