Каково различие между этими двумя заявлениями C#?

Возможный Дубликат:
C#, “как” брошено против классического броска

Я унаследовал некоторый код, и я вижу этот обработчик событий Сетки. Я не знаю, есть ли различие между этими двумя заявлениями, я не думал бы, что есть, но то, что они последовательны в коде, заставляет меня задаться вопросом, почему делают то же самое два пути (предполагающий, что они делают то же самое). Кто-то мог объяснить различие, если таковые имеются?

            GridDataItem ParentItem = e.Item as GridDataItem;

            GridDataItem NewRow = (GridDataItem)e.Item;
2
Это спросили миллион раз в прошлом - stackoverflow.com/questions/955250/…
добавлено автор Denys Wessels, источник
They' r то же самое для меня.
добавлено автор ducnh, источник
добавлено автор Tobias Nilsson, источник
я думал так также, но что он сделал это, тот путь отбросил меня. I' d никогда не замечаемый первый путь, но это, кажется, делает то же самое. Интересно, почему он сделал это
добавлено автор Carlos Mendieta, источник
вы правильны, сэр! Спасибо все, для ответов. Цените большой успех помощи.
добавлено автор Carlos Mendieta, источник

7 ответы

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

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

Прочитанный Больше

6
добавлено

Сначала один: ParentItem будет пустой указатель если e. Пункт не имеет Типа GridDataItem .

The second: It will throw an Exception, if e.Item is not of the type GridDataItem

3
добавлено

Это два различных способа бросить e. Пункт к GridDataItem , в зависимости от того, как вы хотите сценарий где e. Пунктом не является GridDataItem , чтобы быть обработанным.

In the first case, using as: you will always get a result, but if e.Item is not a GridDataItem that result will be null.

In the second case, using an explicit cast: if e.Item is not a GridDataItem, then your code will throw an InvalidCastException (which you can catch).

2
добавлено
//This will perform a safe conversion.  Null will be retuirned if e.Item is not
//a GridDataItem
GridDataItem ParentItem = e.Item as GridDataItem;

//This will throw an exception if e.Item is not a GridDataItem
GridDataItem NewRow = (GridDataItem)e.Item;

See FAQ: http://blogs.msdn.com/b/csharpfaq/archive/2004/03/12/what-s-the-difference-between-cast-syntax-and-using-the-code-as-code-operator.aspx

2
добавлено

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

1
добавлено

Первая линия гарантирует, что ParentItem пустой, если приглашение на однотипные роли не возможно. Вторая линия бросит исключение

1
добавлено

Если e - GridDataItem, никакой différences. Если нет: "поскольку" оператор возвратит Пустой указатель "невозможная выгода" бросит исключение

Таким образом, различие, как вы обращаетесь с ложными ситуациями.

0
добавлено
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot