2010-09-06 83 views
0

是否有可能有任何類型的參數?這就是我的意思:vb.net無類型參數

some_function(argument) 
    if (argument type is string) 
     do something with a string 
    else if (argument type is datarow) 
     do something with a data row 
    ... 

我發現了一些關於泛型,但我不知道是否它是我想要的。

+0

然後請描述你想要的,所以人們可以給你一個體面的解決方案,實際上適合真正的問題。 – 2010-09-06 07:22:19

+0

我想我已經描述得很清楚了。我需要一種方法來接受一個無類型的參數並動態地找到它的類型。什麼不明確? – 2010-09-06 07:27:21

回答

1

你完全可以像下面這樣做:

Sub DoSomething(ByVal arg As Object) 
    If TypeOf arg Is TypeX Then 
     DoSomethingX(DirectCast(arg, TypeX) 
    ElseIf TypeOf arg Is TypeY Then 
     DoSomethingY(DirectCast(arg, TypeY)) 
    End If 
End Sub 

:至少第一問自己如果你想要做什麼真的應該用繼承和多態來完成。

這是一個大詞基本上是這樣的:

Public MustInherit Class BaseType 
    Public MustOverride Sub DoSomething() 
End Class 

Public Class TypeX 
    Inherits BaseType 

    Public Overrides Sub DoSomething() 
     ' Whatever TypeX does. ' 
    End Sub 
End Class 

Public Class TypeY 
    Inherits BaseType 

    Public Overrides Sub DoSomething() 
     ' Whatever TypeY does. ' 
    End Sub 
End Class 

它看起來像很多打字的,但後來在路上任何時候你有,而不是一堆BaseType類型的對象,If/ElseIf檢查,你只是這樣做:

arg.DoSomething() 

可能不是你的情況的解決方案。只是想指出這是存在的,並且可能是可以更好地解決您的問題(很難說沒有細節)。

+0

繼承會很好,當然,但我不能這樣做。感謝這個例子! – 2010-09-06 07:47:41

+0

更好地使用重載,而不是'TypeOf Is'?正如我的回答:) – MarkJ 2010-09-07 10:56:56

+0

@MarkJ:如果參數在代碼中輸入爲「Object」,則不起作用。 – 2010-09-10 19:43:30

0

一種方法是你可以使用基類型。將參數設置爲Object。

some_function(argument as Object) 
if (argument type is string) 
    do something with a string 
else if (argument type is datarow) 
    do something with a data row 
+0

我想這是個好主意,因爲我只會傳入對象後代類型。我現在需要的只是一種檢查類型和投射對象的方式,但這是谷歌應該幫助我的,因此非常感謝提示。 – 2010-09-06 07:34:09

0

只需使用overloading。創建具有相同名稱但不同參數列表的方法。 Visual Basic .NET根據您傳遞的參數類型指出在編譯過程中要調用的方法。

Sub some_function(ByVal argument As String) 

    End Sub 
    Sub some_function(ByVal argument As DataRow) 

    End Sub 
相關問題