2010-07-28 6 views
20

comment convertir le code suivant vb pour C#Comment convertir les TryCast en C#?

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

je l'ai essayé en utilisant AS opérateur C#, mais sa ne fonctionne pas.

Merci d'avance.

+2

Quand vous dites que ça ne fonctionne pas, que voulez-vous dire? Vous obtenez une erreur? Impossible de compiler? Retourne null? Pouvez-vous clarifier? – spinon

Répondre

48

Vous pouvez diffuser en utilisant as; cela ne jette aucune exception, mais le retour null si le casting est pas possible (comme TryCast):

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

Vous pouvez obtenir une valeur par défaut si la distribution est nulle en utilisant l'opérateur ternaire '' 'après l'instruction' as'. – stevehipwell

+5

@ Stevo3000: oui, c'est aussi possible (même si l'opérateur auquel vous faites référence est l'opérateur * null-coalescing *) –

+2

Ça va m'apprendre à poster avant que je me sois réveillé propperly! – stevehipwell

2

fonte Il suffit de:

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

Ce jetteront une exception si la distribution ne réussit pas.

L'opérateur as retourne une valeur nulle si la distribution ne réussit pas:

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

Donc, ce serait plus proche d'un TryCast.

+0

Le seul problème avec ceci vs TryCast est que TryCast ne retournera rien en levant une exception si la distribution n'est pas valide. Alors que AS ne soulèvera pas d'exception. – spinon

5

Le as operator est en fait le C# équivalent:

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

Cependant, une distribution régulière est sans doute préférable:

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

WebRequest.Create devrait toujours entraîner dans une HttpWebRequest lorsqu'elle est appelée avec un schéma d'URI spécifique. S'il n'y a rien d'utile à faire lorsque la distribution échoue, il n'est pas nécessaire de lancer la variable de façon défensive. Si vous ne vous souciez pas du protocole utilisé, votre variable request doit être de type WebRequest (mais vous ne pouvez pas vérifier les codes d'état HTTP).

Pour compléter l'image sur les moulages et la vérification de type en C#, vous pouvez aussi lire le is operator.

1

as est certainement l'opérateur que vous recherchez. Quelle erreur obtenez vous?