小工具搬运工

搬运一些实用的小工具

C#有没有和VB.Net的DirectCast等价物?

我知道它有()强制转换和'as‘关键字,但它们与CType和TryCast一致。

为了清楚起见,这些关键字执行以下操作;

CType/()强制转换:如果它已经是正确的类型,则强制转换它,否则查找类型转换器并调用它。如果找不到类型转换器,则引发InvalidCastException。

TryCast/"as“关键字:如果类型正确,则强制转换,否则返回null。

DirectCast:如果它是正确的类型,则强制转换它,否则抛出InvalidCastException。

在我解释了上面的内容之后,仍然有人回应说()是等价的,所以我将进一步阐述为什么这不是真的。

DirectCast只允许在继承树上进行缩小或扩大转换。它不像()那样支持跨不同分支的转换,即:

C# -编译并运行:

//This code uses a type converter to go across an inheritance tree
double d = 10;
int i = (int)d;

VB.NET -这不能编译

'Direct cast can only go up or down a branch, never across to a different one.
Dim d As Double = 10
Dim i As Integer = DirectCast(d, Integer)

在VB.NET中,与我的C#代码等效的是CType:

'This compiles and runs
Dim d As Double = 10
Dim i As Integer = CType(d, Integer)

如何将下面的vb代码转换成c#?

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

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

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

扫描二维码,在手机上阅读!

添加新评论 »

在这里输入你的评论...

© 2025 小工具搬运工. . 京ICP备17053127号