如何在c#中转换TryCast?

Ren*_*123 28 c# asp.net

如何将以下vb代码转换为c#

Dim request As HttpWebRequest = TryCast(WebRequest.Create(address), HttpWebRequest)
Run Code Online (Sandbox Code Playgroud)

我在c#中使用AS运算符尝试了它,但它不起作用.

先感谢您.

Fre*_*örk 61

你可以使用as; 这不会抛出任何异常,但null如果无法进行强制转换则返回(就像TryCast):

HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest;
Run Code Online (Sandbox Code Playgroud)

  • @ Stevo3000:是的,这也是可能的(即使你所指的运算符是*null-coalescing*运算符) (6认同)
  • 如果在使用`as`语句之后使用三元`??`运算符进行转换为null,则可以获得默认值. (4认同)

Tho*_*rin 9

as运营商实际上是在C#相当于:

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

但是,定期演员可能更可取:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(address);
Run Code Online (Sandbox Code Playgroud)

WebRequest.Create在使用特定URI方案调用时,应始终生成HttpWebRequest.如果在施法失败时没有任何有用的事情,那么就没有必要防御性地施放变量.如果您不关心使用的协议,那么您的request变量应该是类型WebRequest(但是您无法检查HTTP状态代码).

要在C#中完成关于强制转换和类型检查的图片,您可能还想要了解is运算符.


Ode*_*ded 5

简单地投射它:

HttpRequest request = (HttpRequest)WebRequest.Create(address);
Run Code Online (Sandbox Code Playgroud)

如果转换不成功,这将引发异常。

as如果转换不成功,运算符将返回 null:

HttpRequest request = WebRequest.Create(address) as HttpRequest;
// if cast failed, request == null
Run Code Online (Sandbox Code Playgroud)

因此,这将更接近于TryCast.