2010-07-28 23 views
20

wie folgt vb Code konvertieren, um C#Wie konvertiert man TryCast in C#?

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

Ich versuchte es AS-Operator in C# verwenden, aber es funktioniert nicht.

Vielen Dank im Voraus.

+2

Wenn Sie sagen, dass es nicht funktioniert, was meinst du? Sie erhalten einen Fehler? Kann nicht kompiliert werden? Gibt null zurück? Können Sie klären? – spinon

Antwort

48

Sie können mit as; dies wirft jede Ausnahme nicht, aber das Rück null wenn die Besetzung nicht möglich ist (wie TryCast):

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

Sie können einen Standardwert erhalten, wenn die Besetzung null ist, indem Sie den ternären Operator '' 'nach der Anweisung' as' verwenden. – stevehipwell

+5

@ Stevo3000: Ja, das ist auch möglich (auch wenn der Operator, auf den du dich beziehst, der Operator * null-coalescing * ist) –

+2

Das wird mich lehren zu posten, bevor ich richtig geweckt habe! – stevehipwell

2

einfach es Stimmen:

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

Dies wird eine Ausnahme ausgelöst, wenn die Umwandlung nicht erfolgreich ist.

Der as Operator wird eine Null zurück, wenn die Besetzung nicht erfolgreich ist:

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

Also, das zu einem TryCast näher wäre.

+0

Das einzige Problem mit diesem vs TryCast ist, dass TryCast Nothing vs eine Ausnahme auslösen wird, wenn die Besetzung ungültig ist. Wohingegen AS keine Ausnahme aufstellt. – spinon

5

Die as operator ist das C# -Äquivalent in der Tat:

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

jedoch eine regelmäßige Besetzung wahrscheinlich vorzuziehen ist:

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

WebRequest.Create immer in einem HttpWebRequest, wenn sie mit einem bestimmten URI-Schema namens führen sollte. Wenn es nichts Sinnvolles zu tun gibt, wenn die Umwandlung fehlschlägt, muss die Variable nicht defensiv umgewandelt werden. Wenn Sie sich nicht für das verwendete Protokoll interessieren, sollte Ihre request-Variable vom Typ WebRequest sein (Sie haben jedoch die Möglichkeit, HTTP-Statuscodes zu überprüfen).

Um das Bild über Formen und Typ-Check in C# zu vervollständigen, möchten Sie vielleicht auch auf die is operator lesen.

1

as ist definitiv der Betreiber, den Sie suchen. Welchen Fehler bekommst du?

Verwandte Themen