我想這樣做:C#泛型 - 是否可以限制一個方法只接受DataTable和String?
public void MyMethod<T>(T myArg) where T: DataTable, String
{
...
}
這可能嗎?
我想這樣做:C#泛型 - 是否可以限制一個方法只接受DataTable和String?
public void MyMethod<T>(T myArg) where T: DataTable, String
{
...
}
這可能嗎?
使它成爲兩個單獨的方法將是無限可取的。
public void MyMethod(DataTable myArg)
{
...
}
public void MyMethod(String myArg)
{
...
}
,或者,如果通用的(我不知道爲什麼一般需要在這種情況下)
public void MyMethod<T>(T myArg) where T: DataTable
{
...
}
public void MyMethodStr<T>(T myArg) where T: string
{
...
}
或者更糟的情況下,拋出錯誤,如果不是這些類型之一。這是最不可取的,因爲它會在運行時拋出而不編譯。
public void MyMethod<T>(T myArg)
{
if(myArg is String == false && myString is DataTable == false)
throw new InvalidArgumentException(...);
}
但是除此之外,沒有。
那麼,對於那些毫無意義的編譯器 - 它將如何知道哪一個傳入?你能解釋一下這種方法的用例嗎? – Oded
查詢或數據表;如果查詢,我創建我自己的數據表,如果數據表,我使用數據。它幾乎看起來像我應該只有兩種方法,但這是醜陋的,我不能有相同數量的params,但不同類型的重載。所以它會像MyMethodUsingString()或MyMethodUsingDataTable()。毛。 – YuckMouth
它可能是醜陋的(對你的敏感),但它是正確的解決方案。您在這裏並沒有真正使用泛型(或者說,您正在濫用它們)。 – Oded