Разница между myData в виде строки, (string) myData и Convert.ToString (myData) - PullRequest
3 голосов
/ 27 декабря 2010

Мне было немного любопытно узнать, в чем разница между использованием as ключевого слова, Casting или использованием Convert.To_______() функции.

Я после небольшого поиска обнаружил, что оператор as выполняет только ссылочные преобразования и преобразования в боксы.Какие есть другие различия?

Я также заметил, что ключевое слово as используется очень редко, почему так.Есть ли у одного из них выигрыш в производительности по сравнению с другим или это просто избыточность в Framework.

Ответы [ 3 ]

6 голосов
/ 27 декабря 2010

Синтаксис (приведение) очень перегружен и может выполнять:

  • упаковка / распаковка
  • приведение типов, сохраняющих ссылки,
  • операторы преобразования, определенные втипы
  • встроенные примитивные преобразования
  • Обертывание / развёртывание Nullable-of-T

"as" выполняет подмножество этих

  • тип, сохраняющий ссылку, приводит к
  • некоторому ограниченному боксу nullable-of-T

Но важная особенность здесь состоит в том, что он удваивается как без исключения test типовых отношений - более эффективно, чем исключение или тестирование с отражением.В частности, например:

// is it a list?
IList list = obj as IList
if(list != null) {
    // specific code for lists
}

Если вы твердо уверены, что объект является чем-то, предпочтительным является (приведение), поскольку это действует как утверждение вашей веры.Было бы желательно исключение (в этом случае).

Методы Convert обрабатывают другой диапазон сценариев, включая преобразования строк (в противном случае доступны через такие вещи, как статические методы .Parse)

Если что,Конвертировать, что я использую меньше всего.Синтаксис (cast) и «as» используется очень регулярно.

1 голос
/ 27 декабря 2010

Если вы на 100% уверены, что объект, который вы хотите разыграть, будет разыгран, используйте Convert,

Если не использовать как.

1 голос
/ 27 декабря 2010

приведение к как: приведение к исключению, as возвращает ноль, если преобразование невозможно.Никакой разницы в производительности вообще.

Конвертировать: совершенно другое.Вы не можете преобразовать число в строку, но вы можете преобразовать это.Прочитайте документы о том, на что способен класс Convert.

...