VB.NET эквивалент C # «As»

79

Что эквивалентно ключевому слову C # As в VB.NET , как показано ниже?

var x = y as String;
if (x == null) ...
JoelFan
источник

Ответы:

102

Это TryCast:

Dim x As String = TryCast(y, String)
If x Is Nothing Then ...
Ганс Пассан
источник
4
+1 Хотя я считаю, что TryCastэто не совсем то же самое, asпотому TryCastчто не работает для типов значений?
MarkJ
7
@Mark: оператор as также не работает с типами значений в C #.
Hans Passant
2
Что ж, это работает для типов значений, допускающих значение NULL ... Вы можете: var x = y as int ?; if (x == null) ... так что вы должны иметь возможность выполнять Dim x = TryCast (y, System.Nullable (Of Integer)) в VB
JoelFan
2
Это работает только в очень избранных случаях, потому что C # автоматически применяет преобразование упаковки к «y». Он не может преобразовать, скажем, double в int?
Ханс Пассан
1
@HansPassant C # вряд ли когда-либо "косвенно" преобразует один примитивный тип (или любой другой тип) в другой, вы используете метод Convert.ToXXX
enorl76
9

Trycast - это то, что вы ищете.

Dim x = TryCast(y, String)
Мортен Андерсон
источник
6

TryCast:

Dim x = TryCast(y, String)
if (x Is Nothing) ...
Гуффа
источник
5

Ну вот:

Код C #:

var x = y as String;
if (x == null) ...

Эквивалент VB.NET:

Dim x = TryCast(y, String)
If (x Is Nothing) ...
Алекс Эссильфи
источник
0

Вы можете использовать его с ?:

TryCast(item, String)?.Substring(10)

Это позволяет вам управлять нулевым значением без if:)

Эванбуассон
источник
1
Похоже, вопрос не в Тернарном операторе ..
Разработайте