от
Возможные Дубликаты: Литье против использования

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.

13 Ответы

0 голосов
от
Возможные Дубликаты: Литье против использования
0 голосов
от
Бывший будет бросать исключение, если тип источника не может быть приведен к целевому типу. Последнее приведет в SC2 быть пустая ссылка, а не исключение. [Править] Мой оригинальный ответ, Конечно, самое заметное различие, но как Эрик Липперт отмечает, это не единственный. Другие различия включают в себя: Вы не можете использовать 'в' оператор приведения к типу, который не принимает значение null значение Вы не можете использовать 'как', чтобы конвертировать вещи, как числа на другое представление (float в int, например). И, наконец, через 'А' и оператора приведения, вы говорите: "Я не уверен, что это получится."
0 голосов
от
Также обратите внимание, что вы можете использовать только в качестве сайта с ссылочный тип или тип, допускающий значение null т. е.:
double d = 5.34;
int i = d as int;
не будет компилироваться
double d = 5.34;
int i = (int)d;
будет компилироваться.
0 голосов
от
Приведение через "Как", конечно, гораздо быстрее, если не удается выполнить приведение, так как он избегает счет исключения. Но это не быстрее, если бросок преуспевает. Графика в http://www.codeproject.com/KB/cs/csharpcasts.aspx вводит в заблуждение, потому что он не объясняет, что это измерение. Нижняя линия: Если вы ожидаете слепок успеха (т. е. отказ будет только в исключительных случаях), используйте гипс. Если вы не знаете, если это удастся, использовать "в качестве" оператора и проверить результат на null.
0 голосов
от
Разница между двумя подходами состоит в том, что первый ((SomeClass)объект) может вызвать преобразователя типа.
0 голосов
от
Вот хороший способ запомнить процесс, что каждый из них следует, что я использую, когда пытаюсь решить, что лучше для моей ситуации.
DateTime i = (DateTime)value;
// is like doing
DateTime i = value is DateTime ? value as DateTime : throw new Exception(...);
и рядом должен быть легко понять, что он делает
DateTime i = value as DateTime;
в первом случае, если значение не может быть приведено, чем исключение во втором случае, если значение не может быть брошен, я имеет значение null. Поэтому в первом случае трудно остановить, если бросок терпит неудачу во втором литой мягкой остановки и вы можете столкнуться с исключение NullReferenceException позже.
0 голосов
от
Ну " как " оператор "помогает" вам похоронить ваши проблемы как ниже, потому что, когда она оказывается несовместимой инстанции, то он возвращает значение null, может быть, вы будете проходить это метод, который передаст его другим и так далее и, наконец, вы получите исключение NullReferenceException, который сделает ваш отладка сложнее. Не злоупотребляйте этим. Прямые оператором броска лучше, в 99% случаев.
0 голосов
от
Чтобы развернуть на комментарий Rytmis, вы не можете использовать ключевое слово as для структуры (типы значений), так как они имеют значение null.
0 голосов
от
Все это относится к ссылочным типам, типы значений не могут использовать
as
сайта, так как они не могут быть null.
//if I know that SomeObject is an instance of SomeClass
SomeClass sc = (SomeClass) someObject;


//if SomeObject *might* be SomeClass
SomeClass sc2 = someObject as SomeClass;
Литые синтаксис быстрее, но только в случае успеха, это значительно медленнее на провал. Рекомендуется использовать
as
, когда вы не знаете типа:
//we need to know what someObject is
SomeClass sc;
SomeOtherClass soc;

//use as to find the right type
if( ( sc = someObject as SomeClass ) != null ) 
{
    //do something with sc
}
else if ( ( soc = someObject as SomeOtherClass ) != null ) 
{
    //do something with soc
}
Однако если вы абсолютно уверены, что
someObject
является экземпляром
SomeClass
то используйте функцию Cast. В .Объем 2 или выше дженериков означает, что вы очень редко должны иметь типизированная экземпляр ссылочного класса, поэтому последний часто используется.
0 голосов
от
В скобках литой бросает исключение, если привести попытка не удалась. "Как" литой возвращает NULL, если приведение не удается.
Добро пожаловать на сайт ByNets, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...