我在做一個小例子來檢查參數的類型是否有效。動態通用方法T
class A
{
}
class B
{
}
class C
{
}
class D
{
public void SomeMethod<T>(T t) where T : class
{
if (t is A)
{
A a = t as A;
}
else if (t is B)
{
B b = t as B;
}
}
}
然後,我可以打電話:
A a = new A();
SomeMethod<A>(a);
B b = new B();
SomeMethod<B>(b);
現在,我想,以防止通過C
類SomeMethod
。我想達到什麼:
C c = new C();
SomeMethod<C>(c); // error
爲了做到這一點,我已經試過:
public void SomeMethod<T>(T t) where T : A
{
// accept only class A
}
或
public void SomeMethod<T>(T t) where T : B
{
// accept only class B
}
我的問題是:如何聲明SomeMethod
與T
可以A
或B
在同一時間?就像:
public void SomeMethod<T>(T t) where T : A, B
{
// accept class A and class B
}
不,你不能這樣做,因爲它首先打敗了泛型的使用。如果您有支持的案例數量固定,請爲每個案例定義一個過載。 – Lee