Различие между.ToString и “как строка” в C#

Каково различие между использованием этих двух следующих утверждений? Кажется мне, что первое "как строка" тип брошено, в то время как второй ToString является фактическим вызовом к методу, который преобразовывает вход в строку? Просто поиск некоторого понимания если таковые имеются.

Page.Theme = Session["SessionTheme"] as string;
Page.Theme = Session["SessionTheme"].ToString();
66
задан Oded 20 January 2010 в 08:22
поделиться

7 ответов

Если сессия [«СЕССИМАЛЬНАЯ»] не является Строка , , как строка , возвращается NULL .

.TOSTRING () постарается преобразовывать любой другой тип в строку, вызывая метод объекта TOSTRING () . Для большинства встроенных типов это вернет объект, преобразованный в строку, но для пользовательских типов без конкретного метода .toString () он вернет имя типа объекта.

object o1 = "somestring";
object o2 = 1;
object o3 = new object();
object o4 = null;

string s = o1 as string;  // returns "somestring"
string s = o1.ToString(); // returns "somestring"
string s = o2 as string;  // returns null
string s = o2.ToString(); // returns "1"
string s = o3 as string;  // returns null
string s = o3.ToString(); // returns "System.Object"
string s = o4 as string;  // returns null
string s = o4.ToString(); // throws NullReferenceException

Другим важному имению, это то, что если объект NULL , вызов .ToString () будет выбросить исключение, но как строка Просто вернуть NULL .

96
ответ дан 24 November 2019 в 14:59
поделиться

На самом деле лучший способ написания кода выше состоит в том, чтобы сделать следующее:

if (Session["SessionTheme"] != null)
{
    Page.Theme = Session["SessionTheme"].ToString();
}

Таким образом, вы почти уверены, что он не будет бросать NullReferenceException.

-121--935867-

Прежде всего, « любой объект как строка » и « любой объект.тостровый () » - это совершенно разные вещи с точки зрения их соответствующий контекст.

string str = any-object as string;

1) Это отличает любой объект в качестве типа строки, и если какой-либо-объект не является Chainable для строки, то это оператор вернет NULL без учета любого исключения.
2) Это компилятор-сервис.
3) Это работает значительно для любого другого типа, отличного от String, ex: вы можете сделать это как любой объект как сотрудника, где сотрудник является классом, определенным в вашей библиотеке.

string str = any-object.ToString();  

1) Это позвонит TOSTRING () любого объекта из дескрипции типа. Поскольку System.Object определяет метод TOSTRING () Любой класс в .NET Framework имеет метод ToString (), доступный для перезарядки. Программист будет перевернуть TOSTRING () в любом классе или распределении структуры объекта и будет записывать код, который возвращает подходящее строковое представление любого объекта в соответствии с ответственностью и ролью, которую играют любой объект.
2) Как будто вы можете определить метод сотрудника класса и ToString (), который может вернуть строковое представление объекта сотрудника как «Имя - фамилия, EMP-CDEE».

Обратите внимание, что программист имеет управление TOSTRING () в этом случае, и он не имеет ничего общего с преобразованием кастинга или типа.

4
ответ дан 24 November 2019 в 14:59
поделиться

Первый возвращает класс в виде строки, если класс является строкой или полученным из строки (возвращает NULL, если не удалось).

Второй вызывает метод ToString () на классе.

1
ответ дан 24 November 2019 в 14:59
поделиться

На самом деле лучший способ написания кода выше состоит в том, чтобы сделать следующее:

if (Session["SessionTheme"] != null)
{
    Page.Theme = Session["SessionTheme"].ToString();
}

Таким образом, вы почти уверены, что он не бросит NullReferenceException.

0
ответ дан 24 November 2019 в 14:59
поделиться
Page.Theme = Session["SessionTheme"] as string;

пытается преобразовать в строку

, тогда как

Page.Theme = Session["SessionTheme"].ToString;

вызывает метод tostring, который может быть чем угодно. Этот метод не приводит, он должен вернуть строковое представление этого объекта.

5
ответ дан 24 November 2019 в 14:59
поделиться

Проверка как строка - объект является строкой. Если это не ноль, то он возвращается.

Вызов ToString() действительно вызовет метод ToString() на объекте.

1
ответ дан 24 November 2019 в 14:59
поделиться

по ключевому слову в основном проверьте, является ли объект экземпляром типа типа, используя MSIL OPCode ISINST под капотом. Если это так, он возвращает ссылку на объект, а не нулевая ссылка.

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

TOSTRING () , просто вызывает метод объекта TOSTRING () , либо пользовательский, реализованный классом (который для большинства встроенных типов выполняет преобразование в строку) - или если Нет, не предусмотрено, объект базового класса Один, возвращающий тип информации.

13
ответ дан 24 November 2019 в 14:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: