如果我有做一些操作(即工作分爲以下兩種類型之一),並且需要兩個不同類型的工作參數的函數,是有一些不錯的方法,使像public void foo(typeX x || typeY x)
?一個方法,不同的參數
例子:
void main(bool b)
{
if(b)
{
List<int> x = new List<int>();
x.Add(5);
}
else
{
Collection<int> x = new Collection<int>();
x.Add(5);
}
foo(x);
}
我看到它的方式,這留下了兩個選項。
選項1:
void foo(List<int> x)
{
Console.WriteLine(x.ToString());
}
void foo(Collection<int> x)
{
Console.WriteLine(x.ToString());
}
爲什麼不呢?因爲如果void foo()
比僅僅幾行更長,看起來很醜陋,沒有必要。
選項2:
void foo(Object x)
{
Console.WriteLine(x.ToString());
}
爲什麼不呢?對於這個簡單的例子來說很好,但是如果foo應該做一些不是每個對象都有的東西,比如x.Add(1);
,那麼我們會得到一個錯誤,說Object沒有這個方法。
有沒有人知道一些天才的華麗sollution這個?或者我堅持選擇1?
如果你的類型不是東西,如原語或集合,你爲什麼不只是創建一個接口,讓想類型爲富處理? –