2013-01-09 60 views
1

我想知道是否有辦法創建一個可以接受可變數據類型的方法。 有時我需要的對象傳遞給方法有時原始類型,如可以接受各種類型的方法

SomeMethod(object); 
SomeMEthod(r,p,q); //Where r,p,q are integers 

將這種方法的簽名是什麼樣子的?

+1

這些參數是如何使用的? –

+2

你打算如何處理這些數據?這就是*真正推動的答案。記住幾乎所有東西都是一個「對象」,所以這可能就足夠了,這取決於你實際做了什麼。 – Servy

+0

同意Servy的上述評論,有多種選擇來實現你想要的(params變量,重載,通用方法),但是選擇哪一個取決於你可能通過的不同類型會發生什麼。 – thudbutt

回答

2

如果您事先不知道類型,並且它確實可以是任何類型,那麼object參數適用於參考和值類型。

例子:

public static void Method(params object[] list) 
{ 
    for (int i = 0 ; i < list.Length ; i++) 
     Console.WriteLine(list[i]); 
} 

Method(1, 'a', "test"); 

MSDN documentation

4

如果你不關心的參數的方法的類型,你可以簡單地使用:

public void SomeMethod(params object[] list) 

如果需要以不同方式對待類型的參數,你就必須更加具體,創建強類型的方法的幾個重載。

+1

也可以聲明'public void SomeMethod (params T [] list)'以避免裝箱(但會鎖定到特定類型) –

1

如果你想有一個方法來接受任何數量的任何類型的,即使是非常緩慢的,難以維護:

void Foo(params object[] arguments) 
{ 
    //Operate 
} 

上述方法將用於幾乎任何類型的工作,但在值類型它的情況下,將不得不裝箱,這需要處理。如果你想使你的代碼更高效一些,我建議你創建一個重載符合你的需求。

1

還有方法重載,你通過使用相同的名稱但不同特徵的多個方法。

public void SomeMethod(object o) 
{ 
} 

public void SomeMethod(int r, int p, int q) 
{ 
} 
相關問題