none
如何传递system.type并在过程内使用? RRS feed

  • 问题

  • 不知道怎么描述,直接举例子。假如我有两个Enum分别是

    Public Enum A
            A
            B
            C
        End Enum

        Public Enum M
            M
            N
        End Enum

    现在我要在传递到一个过程中

    Public Sub S(ByVal en As System.Type)

            If Not (en.IsSubclassOf(GetType([Enum]))) Then
                Throw New Exception
                Exit Sub
            End If

    现在我要Dim传入的Enum,但我不知道传入的究竟是 A 还是 M

    我想用 dim x as GetType(en),但是错误的,不能这样用

    这里怎么解决啊?是不是要用到反射。求各位大哥给个详细的例子啊。

     

     

        End Sub

     

    2010年5月6日 15:39

答案

  • 你好!

        If(en.GetType().FullName=="MyNameSpace.M")


    周雪峰
    • 已标记为答案 Kira Qian 2010年5月18日 9:46
    2010年5月7日 10:14
    版主
  • 这个相当于传Object才能包括所有类型,你的Enum和Class其实意思相似的,不同的Enum就是不同的类型,当你的函数得到传入的Object对象后调用GetType方法可以知道这个Object具体是什么类型的,然后用反射去创建对象实例。这里没法用Dim来创建的。
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework!
    • 已标记为答案 Kira Qian 2010年5月18日 9:46
    2010年5月11日 9:51

全部回复

  • 你好!

        If(en.GetType().FullName=="MyNameSpace.M")


    周雪峰
    • 已标记为答案 Kira Qian 2010年5月18日 9:46
    2010年5月7日 10:14
    版主
  • 你好,谢谢你的回答。

    但是我不是要对比两个是否同一个 Type,可能我描述不清楚。

    我是想把一个enum 的类型传入后用在

    dim ... as 或者 for each ..... as 语句当中,

    比如我有两个 enum分别是 A 和 M

    如果我知道是哪个一Enum,我直接及可以

    dim I as A 或者 for each I as A

    但我把它放在一个变量中传入到一个过程时,比如

    Public Sub S(ByVal en As System.Type)

    我在这过程中怎么 用 dim I as 或者  for each I as ,

    不知道这次我表述清楚我的问题没,再一次衷心感谢。

     

    2010年5月7日 15:21
  • 这个相当于传Object才能包括所有类型,你的Enum和Class其实意思相似的,不同的Enum就是不同的类型,当你的函数得到传入的Object对象后调用GetType方法可以知道这个Object具体是什么类型的,然后用反射去创建对象实例。这里没法用Dim来创建的。
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework!
    • 已标记为答案 Kira Qian 2010年5月18日 9:46
    2010年5月11日 9:51