Разница между ними.ToString и "как строка" в C#
в чем разница между двумя следующими утверждениями? Мне кажется, что первый "as string" - это тип cast, а второй ToString-это фактический вызов метода, который преобразует входные данные в строку? Просто ищу некоторое понимание, если таковые имеются.
Page.Theme = Session["SessionTheme"] as string;
Page.Theme = Session["SessionTheme"].ToString();
8 ответов:
если
Session["SessionTheme"]
неstring
,as string
вернутся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()
будет бросать исключение, ноas string
простоnull
.
The
as
ключевое слово будет в основном проверять, является ли объектis
экземпляр типа, используя MSIL opcodeisinst
под капотом. Если это так, он возвращает ссылку на объект, иначе нулевую ссылку.это тут не, как многие говорят, попытка выполнить приведение как таковое-что подразумевает некоторую обработку исключений. Не очень.
ToString()
, просто вызывает объектToString()
метод, либо пользовательский, реализованный классом (который для большинство встроенных типов выполняет преобразование в строку) - или если ни один из них не указан, базовый классobject
один, возвращающий информацию о типе.
Page.Theme = Session["SessionTheme"] as string;
пытается привести к строке
, тогда как
Page.Theme = Session["SessionTheme"].ToString;
вызывает метод tostring, который может быть чем угодно на самом деле. Этот метод не приводит, он должен возвращать строковое представление этого объекта.
прежде всего"любой-объект в виде строки" и "любой объект.ToString ()" это совершенно разные вещи с точки зрения их соответствующем контексте.
string str = any-object as string;
1) это приведет к приведению any-object как строкового типа, и если any-object не может быть приведено к string, то этот оператор вернет null без каких-либо исключений.
2) это компилятор-сервис.
3) это работает довольно хорошо для любого другого типа чем нить другим, например, вы можете сделать это any-объект как Employee, где Employee-это класс, определенный в вашей библиотеке.string str = any-object.ToString();
1) это вызовет ToString () любого объекта из определения типа. Начиная С Системы.Объект определяет метод ToString() любой класс в .Net framework имеет метод ToString (), доступный для перегрузки. Программист пересечет ToString() в любом классе объектов или определении структуры и напишет код, который возвращает подходящее строковое представление любого объекта в соответствии с ответственностью и ролью играть на любой объект.
2) Как вы можете определить класс Employee и метод over-ride ToString (), который может возвращать строковое представление объекта Employee как "FIRSTNAME - LASTNAME, EMP-CDOE" .обратите внимание, что программист имеет контроль над ToString() в этом случае, и это не имеет ничего общего с литьем или преобразованием типа.
чтобы еще больше запутать вопрос, C# 6.0 ввел оператор. Так что теперь это также можно записать как:
Page.Theme = Session["SessionTheme"]?.ToString();
который вернет либо null, либо результат из ToString() без создания исключения.
The
as string
проверьте, является ли объект строкой. Если это не null, он возвращается.вызов
ToString()
действительно назватьToString()
метод на объекте.