Каково различие между использованием этих двух следующих утверждений? Кажется мне, что первое "как строка" тип брошено, в то время как второй ToString является фактическим вызовом к методу, который преобразовывает вход в строку? Просто поиск некоторого понимания если таковые имеются.
Page.Theme = Session["SessionTheme"] as string;
Page.Theme = Session["SessionTheme"].ToString();
Если сессия [«СЕССИМАЛЬНАЯ»]
не является Строка
, , как строка
, возвращается 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
.
На самом деле лучший способ написания кода выше состоит в том, чтобы сделать следующее:
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 () в этом случае, и он не имеет ничего общего с преобразованием кастинга или типа.
Первый возвращает класс в виде строки, если класс является строкой или полученным из строки (возвращает NULL, если не удалось).
Второй вызывает метод ToString () на классе.
На самом деле лучший способ написания кода выше состоит в том, чтобы сделать следующее:
if (Session["SessionTheme"] != null)
{
Page.Theme = Session["SessionTheme"].ToString();
}
Таким образом, вы почти уверены, что он не бросит NullReferenceException.
Page.Theme = Session["SessionTheme"] as string;
пытается преобразовать в строку
, тогда как
Page.Theme = Session["SessionTheme"].ToString;
вызывает метод tostring, который может быть чем угодно. Этот метод не приводит, он должен вернуть строковое представление этого объекта.
Проверка как строка
- объект является строкой. Если это не ноль, то он возвращается.
Вызов ToString()
действительно вызовет метод ToString()
на объекте.
по ключевому слову
в основном проверьте, является ли объект
экземпляром типа типа, используя MSIL OPCode ISINST
под капотом. Если это так, он возвращает ссылку на объект, а не нулевая ссылка.
Это не так, как многие говорят, попытка выполнить актеров на то, что подразумевает какое-то образование исключения. Не так.
TOSTRING ()
, просто вызывает метод объекта
TOSTRING ()
, либо пользовательский, реализованный классом (который для большинства встроенных типов выполняет преобразование в строку) - или если Нет, не предусмотрено, объект базового класса
Один, возвращающий тип информации.