Перше, що слід зазначити, VB.NET не має прямого аналога (type)instance
механізму лиття C # . Я підводжу це, тому що це корисно як відправна точка для порівняння двох операторів VB.NET (і вони є операторами, а не функціями, хоча вони мають семантику функцій).
DirectCast()
є більш суворим, ніж оператор кастингу C #. Це дозволяє лише виконувати трансляцію, коли елемент, який ви вже передавали, є типом, до якого ви кидаєте . Я вважаю, що вона все одно буде розблоковувати типи значень, але в іншому випадку це не здійснить перетворення. Так, наприклад, ви не можете short
перейти до int
, як ви могли б із C # (int)
акторською командою. Але ви можете передавати з IEnumerable
масиву на масив, якщо ваша основна IEnumerable
змінна об'єкт дійсно є Array
. І звичайно, ви можете переходити Object
до будь-чого, припускаючи, що тип вашого об'єкта дійсно десь нижче вашого типу лиття в дереві спадкування.
Це бажано, оскільки це набагато швидше . Тут потрібно менше перевірок конверсій та типів.
CType()
менш суворий, ніж оператор кастингу C #. Він буде робити те, що ви просто не можете зробити з простим (int)
стилем, наприклад перетворити рядок у ціле число. Він має стільки ж сил, скільки дзвінків Convert.To___()
у C #, де ___
цільовий тип вашого акторського складу.
Це бажано, оскільки воно дуже потужне. Однак ця потужність поставляється ціною продуктивності; це не так швидко, як DirectCast()
або оператор лиття C #, тому що, можливо, знадобиться зробити дуже багато роботи, щоб закінчити гру. Як правило, вам слід віддати перевагу, DirectCast()
коли можете.
Нарешті, ви пропустили одного оператора кастингу:, TryCast()
який є прямим аналогом as
оператора C # .