Струнные броски - PullRequest
       14

Струнные броски

9 голосов
/ 30 марта 2009

Почему существуют способы конвертации в строку в .net? Вот способы, которые я видел: .ToString, Convert.ToString () и (string). В чем разница.

Ответы [ 9 ]

20 голосов
/ 30 марта 2009

Convert.ToString(obj)

Преобразует указанное значение в его эквивалентное строковое представление. Вернет String.Empty, если указано значение null.

obj.ToString()

Возвращает строку, которая представляет текущий объект. Этот метод возвращает читаемую человеком строку, чувствительную к культуре. Например, для экземпляра класса Double, значение которого равно нулю, реализация Double.ToString может вернуть «0,00» или «0,00» в зависимости от текущей культуры пользовательского интерфейса. Реализация по умолчанию возвращает полностью определенное имя типа объекта.

Этот метод может быть переопределен в производном классе для возврата значений, которые имеют значение для этого типа. Например, базовые типы данных, такие как Int32, реализуют ToString, так что он возвращает строковую форму значения, которое представляет объект. Производные классы, которые требуют большего контроля над форматированием строк, чем обеспечивает ToString, должны реализовывать IFormattable, метод ToString которого использует свойство CurrentCulture текущего потока.

(string)obj

Это операция приведения, а не вызов функции. Используйте его, если вы уверены, что объект имеет тип string ИЛИ у него есть неявный или явный оператор, который может преобразовать его в строку. Вернет null, если объект null AND of type String or of type which implements custom cast to string operator. See examples.</p> <h2><code>obj as string

Безопасная операция приведения. То же, что и выше, но вместо того, чтобы генерировать исключение, оно вернет null, если операция приведения не удалась.


Подсказка : Не забудьте использовать CultureInfo с obj.ToString() и Convert.ToString(obj)

Пример:

12345.6D.ToString(CultureInfo.InvariantCulture);          // returns 12345.6
12345.6D.ToString(CultureInfo.GetCultureInfo("de-DE"));   // returns 12345,6
Convert.ToString(12345.6D, CultureInfo.InvariantCulture); // returns 12345.6
Convert.ToString(12345.6D, CultureInfo.GetCultureInfo("de-DE"));  // 12345,6
Convert.ToString(test);  // String.Empty, "test" is null and it's type
                         // doesn't implement explicit cast to string oper.
Convert.ToString(null);  // null
(string) null;           // null
(string) test;           // wont't compile, "test" is not a string and
                         // doesn't implement custom cast to string operator
(string) test;           // most likely NullReferenceException,
                         // "test" is not a string,
                         // implements custom cast operator but is null
(string) test;           // some value, "test" is not a string,
                         // implements custom cast to string operator
null as string;          // null

Вот пример пользовательского оператора приведения:

public class Test
{
    public static implicit operator string(Test v)
    {
        return "test";
    }
}
</code>
8 голосов
/ 30 марта 2009
  • .ToString() можно вызвать из любого объекта. Однако, если тип, к которому вы его вызываете, не имеет хорошей реализации, по умолчанию возвращается имя типа, а не что-то значимое для экземпляра этого типа. Этот метод унаследован от базового типа Object, и вы можете перегрузить его в своих собственных типах, чтобы делать все, что вы хотите.

  • (string) - это cast , а не вызов функции. Вы должны использовать это только в том случае, если нужный вам объект в некотором смысле является строкой или если вы знаете, что доступно хорошее неявное преобразование (например, из int). Это вызовет исключение, если объект не может быть преобразован (в том числе, когда объект null)

  • as string - это еще один способ записи (string), но он отличается тем, что возвращает null, а не выдает исключение в случае неудачного приведения.

  • Convert.ToString() пытается на самом деле преобразовать аргумент в строку. Это лучший вариант, если вы не очень много знаете об аргументе. Он может быть медленным, потому что он должен проделать большую дополнительную работу, чтобы определить, какие результаты нужно вернуть, но та же самая работа также делает его наиболее надежным вариантом, когда вы не очень много знаете об аргументе. Если больше ничего не доступно, он обратится к вызову метода .ToString() аргумента.

  • String.Format Метод класса .Format класса строки также можно использовать для преобразования определенных типов в строки, с дополнительным преимуществом того, что у вас есть некоторый контроль над тем, как будет выглядеть результирующая строка как.

  • Serialization Это немного сложнее, но .Net включает в себя пару различных механизмов для преобразования объектов в представление, которое можно безопасно хранить и перезагружать с диска или другой потоковой передачи. механизм. Это включает двоичный форматер, но чаще всего включает преобразование в строку в каком-либо формате или другом (часто в xml). Сериализация подходит, когда вы хотите позже преобразовать вашу строку обратно в исходный тип или если вы хотите получить полное представление сложного типа.

5 голосов
/ 30 марта 2009

Convert.ToString () вернет пустую строку, если объект имеет значение null .ToString и (String) сгенерирует исключение. Convert.ToString будет внутренне вызывать .ToString (), если значение равно нулю, он возвратит пустую строку.

2 голосов
/ 30 марта 2009

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

Convert.ToString() расширяется на этом и предоставляет некоторые конкретные перегрузки для примитивных типов (char, byte, int, double и т. Д.), Которые допускают некоторые более специфичные для типа функциональные возможности (например, базовое преобразование, для пример)

(string) является оператором приведения и будет работать, только если тип является либо строковым, либо имеет неявный или явный оператор, который может преобразовать его в строку. В противном случае вы получите InvalidCastException

1 голос
/ 30 марта 2009

Не забудьте as string

0 голосов
/ 30 марта 2009

Не для придирки, но null является допустимым значением для объекта String. Поэтому (string) null не выдает никаких исключений. Попробуйте сами:

using System;

namespace Test
{
    class Program
    {
        public static void Main(string[] args)
        {
            string s = (string) null;
            Console.WriteLine(s);
        }
    }
}
0 голосов
/ 30 марта 2009

.ToString () - это метод экземпляра, который запрашивает у объекта его строковое представление. Когда объект нулевой, это вызовет исключение.

(string) - приведение к строковому типу, что не очень хорошая идея в большинстве случаев, за исключением простых типов данных, поскольку оно может сломаться (выбросить исключение), когда оно равно нулю или недопустимо приведение

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

0 голосов
/ 30 марта 2009

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

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

(строка) приведёт ваш объект к строке, и если это не строка, вы получите InvalidCastException ().

0 голосов
/ 30 марта 2009

Подумайте.

ToString - это виртуальный метод, и каждый тип может реализовать его так, как ему хочется. Кроме того, System.Object предоставляет реализации по умолчанию, поэтому он всегда выполняется успешно. Convert.ToString также работает только с нулями и позволяет использовать провайдер IFormat, как отмечено в комментарии.

Приведение к строке требует объекта для реализации оператора приведения. Опять же, типы могут реализовывать его так, как им нравится, но большинство типов этого не делают, поэтому вы можете получить исключение здесь.

Используйте .ToString как лучший вариант.

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