Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net TypeOf是myType_.net_Vb.net_Typeof - Fatal编程技术网

.net TypeOf是myType

.net TypeOf是myType,.net,vb.net,typeof,.net,Vb.net,Typeof,作为对象的公共MyObj Public Function Test(t as Type) as Boolean Return TypeOf MyObj is t ' does not work End Function 谢谢 *编辑 ==================================================================== 为了清楚起见,我将使用一个完整的例子,一个最初被认为有点修改的例子 我使用一个接口,希望知道传入参数的对象(实现I)是否与内

作为对象的公共MyObj

Public Function Test(t as Type) as Boolean
 Return TypeOf MyObj is t ' does not work
End Function
谢谢

*编辑 ====================================================================

为了清楚起见,我将使用一个完整的例子,一个最初被认为有点修改的例子

我使用一个接口,希望知道传入参数的对象(实现I)是否与内部字段的类型相同(I;a:I;AA:a;B:I

首先,(a)我需要准确的类标识(只有a=a,B=B,AA=AA) 我还希望有一个“继承等价性”(a=a和a=AA,但AB)

你可以简单地做:

Return GetType(MyObj).Equals(t)
你可以简单地做:

Return GetType(MyObj).Equals(t)

与比较类型是否相等不同,您可能希望使用:

如果查看运算符文档,您会发现它需要一个类型名作为第二个操作数。此类型名称在编译时解析

编辑:如果你真的想要完全相等,那么
TypeOf。。。是…
无论如何都不会对你有用

至于区别,请考虑:

MyObj = New MemoryStream()

...

Dim result = Test(GetType(Stream))
您希望
结果
为真还是假?如果希望它为false,则应使用简单等式:

return t is MyObj.GetType()
如果您希望它是真的,因为
MyObj
Stream
的赋值兼容,您应该使用此答案顶部的代码。这就是MyObject Is Stream的
类型的行为,这就是我最初回答的原因

编辑:好的,回答更改后的问题:

Function SameTypeAs(ByVal iObj As I) As Boolean
  Return Me.objI.GetType() = iObj.GetType()
End Function

Function CompatibleType(ByVal iObj As I) As Boolean
  Return Me.objI.GetType().IsAssignableFrom(iObj.GetType())
  ' Or this depending on which way round you want compatibility
  ' Return iObj.GetType().IsAssignableFrom(Me.objI.GetType())
End Function

请注意,这不是空安全的-如果您传入
Nothing
Me.objI
为Nothing,则调用
GetType()

时会出现
NullReferenceException
,而不是比较类型是否相等,您可能希望使用:

如果查看运算符文档,您会发现它需要一个类型名作为第二个操作数。此类型名称在编译时解析

编辑:如果你真的想要完全相等,那么
TypeOf。。。是…
无论如何都不会对你有用

至于区别,请考虑:

MyObj = New MemoryStream()

...

Dim result = Test(GetType(Stream))
您希望
结果
为真还是假?如果希望它为false,则应使用简单等式:

return t is MyObj.GetType()
如果您希望它是真的,因为
MyObj
Stream
的赋值兼容,您应该使用此答案顶部的代码。这就是MyObject Is Stream的
类型的行为,这就是我最初回答的原因

编辑:好的,回答更改后的问题:

Function SameTypeAs(ByVal iObj As I) As Boolean
  Return Me.objI.GetType() = iObj.GetType()
End Function

Function CompatibleType(ByVal iObj As I) As Boolean
  Return Me.objI.GetType().IsAssignableFrom(iObj.GetType())
  ' Or this depending on which way round you want compatibility
  ' Return iObj.GetType().IsAssignableFrom(Me.objI.GetType())
End Function
请注意,这不是空安全的-如果您传入
Nothing
Me.objI
为Nothing,则调用
GetType()

,您将得到
NullReferenceException
,最后,对于一点,我似乎找到了解决方案:

  Function SameTypeAs(ByVal iObj As I) As Boolean
    Return CType(iObj, Object).GetType Is CType(Me.objI, Object).GetType()
  End Function
或者通用的变体

  Function SameTypeAs(Of T As I)() As Boolean
    Return TypeOf Me.objI Is T
  End Function
最后,对于a)点,我似乎找到了一个解决方案:

  Function SameTypeAs(ByVal iObj As I) As Boolean
    Return CType(iObj, Object).GetType Is CType(Me.objI, Object).GetType()
  End Function
或者通用的变体

  Function SameTypeAs(Of T As I)() As Boolean
    Return TypeOf Me.objI Is T
  End Function

至于b)…

@serhio:对不起,我的意思是
类型的。。。Is…
需要编译时类型。如果使用
Return MyObj is t
,则只有当MyObj恰好是
GetType(Type)
时才会返回true-它将
MyObj
的值与类型
t
进行比较,而不是
MyObj
的值的类型@serhio:对不起,我的意思是
TypeOf。。。Is…
需要编译时类型。如果使用
Return MyObj is t
,则仅当MyObj恰好是
GetType(Type)
时才会返回true-它将
MyObj
的值与类型
t
进行比较,而不是
MyObj
的值的类型。问题是什么?“不起作用”不是很好的描述,问题是什么?“不起作用”并不是确切的描述,只是一个add:if而不是t作为类型where obj作为对象?@serhio:我看不出这有什么帮助。只是一个add:if而不是t作为类型where obj作为对象?@serhio:我看不出这有什么帮助。你为什么在这里使用CType?直接调用GetType就可以了。不,我想我需要使用DirectCast,因为它是运行时的最佳选择。直接获取类型我不能,因为接口。为什么在这里使用CType?直接调用GetType就可以了。不,我想我需要使用DirectCast,因为它是运行时的最佳选择。直接获取类型我不能,因为接口。