Есть ли у С# эквивалент VB.NET DirectCast?
Я знаю, что он имеет() casts и ключевое слово 'as', но они выстраиваются в линию до CType и TryCast.
Чтобы быть ясным, эти ключевые слова делают следующее:
CType/() casts: если это уже правильный тип, бросьте его, в противном случае найдите конвертер типов и вызовите его. Если конвертер типа не найден, вызовите InvalidCastException.
TryCast/ "as" ключевое слово: если это правильный тип, произведите его, иначе верните нуль.
DirectCast. Если это правильный тип, бросьте его, в противном случае выведите InvalidCastException.
После того, как я изложил вышесказанное, некоторые люди все еще ответили, что() эквивалентно, поэтому я буду дальше раскрывать, почему это не так.
DirectCast допускает только сужение или расширение конверсий в дереве наследования. Он не поддерживает преобразования в разных ветвях типа(), т.е.:
С# - это компиляция и запуск:
//This code uses a type converter to go across an inheritance tree
double d = 10;
int i = (int)d;
VB.NET - это НЕ КОМПЛЕКС
'Direct cast can only go up or down a branch, never across to a different one.
Dim d As Double = 10
Dim i As Integer = DirectCast(d, Integer)
Эквивалент в VB.NET для моего кода на С#: CType:
'This compiles and runs
Dim d As Double = 10
Dim i As Integer = CType(d, Integer)