У чому полягає різниця між цими двома заявами C #?

Можливі дублікати:
   C# "як" cast vs classic cast

Я успадкував деякий код, і я бачу це обробник подій Grid. Я не знаю, чи є різниця між цими двома твердженнями, я б не думала, що це є, але той факт, що вони повертаються назад до коду, заважає мені, чому те ж саме робити двома способами (припускаючи, що вони такі ж річ) Чи може хтось пояснити різницю, якщо така є?

            GridDataItem ParentItem = e.Item as GridDataItem;

            GridDataItem NewRow = (GridDataItem)e.Item;
2
Про це минуло більше мільйонів разів - stackoverflow.com/questions/955250/…
додано Автор Denys Wessels, джерело
Вони для мене такі ж.
додано Автор ducnh, джерело
додано Автор Tobias Nilsson, джерело
Я так теж подумав, але те, що він це зробив, так кинув мене. Я ніколи не бачив першого способу, але, як видається, робить те саме. Цікаво, чому він це зробив
додано Автор Carlos Mendieta, джерело
ти правий, сер! Дякую всім, за відповіді. Оцініть допомогу bigtime.
додано Автор Carlos Mendieta, джерело

7 Відповіді

"Оператор, як оператор, подібний до операції cast, але якщо перетворення неможливе, тому що повертає нуль, а не викликає виняток"

"Зауважте, що оператор" як "виконує лише еталонні конверсії та перетворення боксу. Оператор, як оператор, не може виконувати інші перетворення, такі як визначені користувачем конверсії, які замість цього повинні виконуватися за допомогою виразів" ".

Докладніше

6
додано

Перший: ParentItem буде null , якщо e.Item не має Type GridDataItem .

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

3
додано

Це два різні способи передачі e.Item до GridDataItem залежно від того, як ви хочете сценарій, де e.Item не є < code> 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, немає різниці. Якщо ні : оператор "as" поверне Null "неможливий вилов" викине виняток

Отже, різниця - "просто", як ви справляєтесь з помилковими ситуаціями.

0
додано
var chat = new Chat();
var chat = new Chat();
642 учасників

Обсуждение вопросов по C# / .NET / .NET Core / .NET Standard / Azure Сообщества-организаторы: — @itkpi — @dncuug