Ich mache ein kleines Beispiel, um zu überprüfen, ob der Typ des Parameters gültig ist oder nicht.Generische Methode mit dynamischem 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;
}
}
}
Dann kann ich nennen:
A a = new A();
SomeMethod<A>(a);
B b = new B();
SomeMethod<B>(b);
Nun ich vorbei Klasse C
zu SomeMethod
verhindern wollen. Was ich erreichen möchte:
C c = new C();
SomeMethod<C>(c); // error
, das zu tun, ich habe versucht:
public void SomeMethod<T>(T t) where T : A
{
// accept only class A
}
oder
public void SomeMethod<T>(T t) where T : B
{
// accept only class B
}
Meine Frage ist: Wie erklären SomeMethod
mit T
kann A
sein oder B
gleichzeitig? Genau wie:
Nein, Sie können dies nicht tun, da es den Punkt bei der Verwendung von Generika in erster Linie besiegt. Wenn Sie eine feste Anzahl von Fällen haben, die Sie unterstützen, definieren Sie für jeden Fall eine Überladung. – Lee