Использование .ToString () с числовыми переменными - PullRequest
2 голосов
/ 04 июня 2011

Есть ли недостаток для пропуска .ToString() при преобразовании числовых значений в string?

int i = 1234;
string s;
// Instead of
s = "i is " + i.ToString();
// Writing
s = "i is " + i;

Ответы [ 4 ]

4 голосов
/ 04 июня 2011

Это не имеет значения в этом случае.

"Count: " + i

компилируется до

String.Concat("Count: ",i)

String.Concat имеет несколько перегрузок, и я считаю, что выбрана перегрузка Concat(Object, Object) (поскольку единственным общим предком string и int является object).

Внутренняя реализация такова:

 return (arg0.ToString() + arg1.ToString());

Если вы позвоните

"Count: " + i.ToString()

тогда он выбирает перегрузку Concat(String, String), так как оба являются строками.

Так что по всем практическим вопросам, в сущности, он делает то же самое - он неявно вызывает i.ToString ().

Я обычно опускаю .ToString в случаях, подобных описанным выше, потому что он просто добавляет шум.

1 голос
/ 04 июня 2011

Несмотря на то, что он не будет компилироваться (по крайней мере, он не будет использовать Visual Studio 2008 без добавления еще одного "" перед первым i), существуют различия, в зависимости от того, как вы его используете (при условии егобудет работать) и в каком порядке обрабатываются операторы (в C #, и я думаю, почти все языки + имеют более высокий приоритет, чем =):

int i = 1234;
string s;
s = i.ToString(); // "1234"
s = i.ToString() + i.ToString(); // "12341234"
s = i; // "1234"
s = i + i; // "2468" (but only if you don't add "" in front)

Редактировать: с обновленным кодом нет реальногоразница, если вы не используете скобки для группировки нескольких нестроковых объектов / переменных:

int i = 1234;
string s;
s = "" + i + i; // "12341234"
s = "" + (i + i); // "2468"
1 голос
/ 04 июня 2011

Единственный недостаток, который я могу вспомнить, это то, что вы можете добавить дополнительные параметры к ToString().

Но в большинстве случаев, когда вы можете объединить строку с int, я думаю, что лучшее решение - это использовать string.Format():

string.Format("i is {0}", i);

В вашем случае не так очевидно, что этот способ лучше, но вы начинаете задумываться о добавлении правильной пунктуации (i is {0}.), незначительном изменении вывода другим способом илиПри поддержке локализации преимущества этого способа становятся очевидными.

0 голосов
/ 04 июня 2011

Назначение s = i не будет компилироваться, если включен Option Strict (по умолчанию для C #).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...