C#有没有和VB.Net的DirectCast等价物?
作者:Debuger 发布时间:May 1, 2022 分类:文章分享
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;