2010-07-28 11 views
20

cómo convertir siguiente código VB a C#Cómo convertir TryCast en C#?

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

lo probé usando AS operador en C#, pero no su trabajo.

Gracias de antemano.

+2

Cuando dices que no funciona, ¿a qué te refieres? ¿Estás recibiendo un error? No se puede compilar? Devuelve nulo? ¿Puedes aclarar? – spinon

Respuesta

48

Puede enviar contenido a través as; esto no va a lanzar ninguna excepción, pero volver null si el yeso no es posible (al igual que TryCast):

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

Puede obtener un valor predeterminado si el molde es nulo utilizando el operador '??' ternario después de la instrucción 'as'. – stevehipwell

+5

@ Stevo3000: sí, es posible (a pesar de que el operador se está refiriendo es el * * nula coalescencia-operador) –

+2

Eso les enseñará mí puesto antes de que yo he despertado propperly arriba! – stevehipwell

2

Simplemente lo echarás:

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

Esto lanzará una excepción si el molde no tiene éxito.

El operador as devolverá un valor nulo si el elenco no tiene éxito:

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

Por lo tanto, esto sería más cerca de una TryCast.

+0

El único problema con este frente a TryCast es que TryCast devolverá Nothing frente a una excepción si el molde no es válido. Considerando que AS no generará una excepción. – spinon

5

El as operator es de hecho el equivalente C#:

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

Sin embargo, un reparto regular es probablemente preferible:

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

WebRequest.Create siempre debe resultar en una HttpWebRequest cuando se le llama con un esquema URI específico. Si no hay nada útil que hacer cuando el lanzamiento falla, entonces no hay necesidad de lanzar la variable a la defensiva. Si no le importa el protocolo utilizado, su variable request debe ser del tipo WebRequest (pero pierde la posibilidad de verificar los códigos de estado HTTP).

Para completar la imagen acerca de los moldes y la verificación de tipos en C#, es posible que desee leer también en el is operator.

1

as es definitivamente el operador que está buscando. ¿Qué error estás recibiendo?

Cuestiones relacionadas