Разница между (string) reader [0] и reader [0] .ToString () - PullRequest
3 голосов
/ 12 мая 2011

Есть ли разница между DataReader[0].ToString() и (string)DataReader[0]?

Я предполагаю, что (string)DataReader[0] может завершиться ошибкой, если тип базы данных не является строковым типом, где DataReader[0].ToString() будет просто преобразовывать что-либовне БД ноль в строку.Это тот случай?

Что будет быстрее?

Ответы [ 3 ]

2 голосов
/ 12 мая 2011

Они оба знакомят вас с потенциальными исключениями данных, IMO оптимальный способ чтения из считывателя:

var x = reader[0] as string

Тогда для чисел / bools и т. Д. Я всегда использую обнуляемые типы, так чтоВы можете получить

var y = reader[1] as int?

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

int i = (reader[1] as int?).GetValueOrDefault()

0 голосов
/ 05 декабря 2014

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

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

    public virtual string ToString()
    {
      return this.GetType().ToString();
    }

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

Если мы не уверены в типе object, то ответ будет: ToString() вместо (string).

Если вы хотите увидеть тест производительности (string) vs .ToString (), перейдите по ссылке: (string) vs .ToString ()

0 голосов
/ 12 мая 2011

(строка) DataReader [0] является типизацией.Компилятор вставит некоторый набор инструкций во время компиляции, которые должны быть выполнены для выполнения преобразования, и выдает исключение, если это не удается сделать.

DataReader [0] .tostring () - это вызов функциикоторая решается во время выполнения и без исключений.

Эксперты, пожалуйста, исправьте меня, если я ошибаюсь.

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