2010-07-28 4 views
20

как преобразовать следующий VB кода на C#Как преобразовать TryCast в C#?

Dim request As HttpWebRequest = TryCast(WebRequest.Create(address), HttpWebRequest) 

я попробовал его, используя в качестве оператора в C# но не работает.

Благодарю вас заранее.

+2

Когда вы говорите, что это не работает, что вы имеете в виду? Вы получаете сообщение об ошибке? Не удается скомпилировать? Возвращает null? Вы можете уточнить? – spinon

ответ

48

Можно использовать с использованием as; это не будет бросать какие-либо исключения, но вернуть null если бросок не представляется возможным (как TryCast):

HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest; 
+3

Вы можете получить значение по умолчанию, если приведение равно нулю, используя трёхмерный оператор '??' после оператора 'as'. – stevehipwell

+5

@ Stevo3000: да, это также возможно (хотя оператор, о котором вы говорите, является оператором * null-coalescing *) –

+2

Это научит меня публиковать, прежде чем я буду просыпаться! – stevehipwell

2

Просто брось:

HttpRequest request = (HttpRequest)WebRequest.Create(address); 

Это будет сгенерировано исключение, если бросок не увенчались успехом.

Оператор as возвращает нуль, если бросок не увенчались успехом:

HttpRequest request = WebRequest.Create(address) as HttpRequest; 
// if cast failed, request == null 

Таким образом, это будет ближе к TryCast.

+0

Единственная проблема с этим vs TryCast заключается в том, что TryCast вернет Nothing или повысит исключение, если приведение недействительно. В то время как AS не будет создавать исключение. – spinon

5

as operator является фактически C# эквивалент:

HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest; 
Debug.Assert(request != null); // request will be null if the cast fails 

Однако регулярный бросок вероятно, предпочтительнее:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(address); 

WebRequest.Create всегда должно привести к HttpWebRequest при вызове с конкретной схемой URI. Если нет ничего полезного в том, что происходит при отказе, тогда нет необходимости защищать эту переменную. Если вам не нужен используемый протокол, то ваша переменная request должна иметь тип WebRequest (но вы теряете возможность проверки кодов состояния HTTP).

Чтобы заполнить рисунок о проверках и проверке типов на C#, вы можете прочитать на is operator.

1

as определенно тот оператор, которого вы ищите. Какую ошибку вы получаете?

Смежные вопросы