Разница между ними.ToString и "как строка" в C#


в чем разница между двумя следующими утверждениями? Мне кажется, что первый "as string" - это тип cast, а второй ToString-это фактический вызов метода, который преобразует входные данные в строку? Просто ищу некоторое понимание, если таковые имеются.

Page.Theme = Session["SessionTheme"] as string;
Page.Theme = Session["SessionTheme"].ToString();
8 59

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 opcode isinst под капотом. Если это так, он возвращает ссылку на объект, иначе нулевую ссылку.

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

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() метод на объекте.

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

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

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

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

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