Danke, Claudius.
Die "as" Variante funktioniert nicht in meinem Fall, da ich mit
abgeleiteten Klassen arbeiten muss. Genau gesagt würde es so
ausschauen:
class Base {}
class ClassA : Base {}
class ClassB : Base {}
dann hab ich ein Array aus Base Objekten, also Base[] a;
und verwenden würde ich es dann als
foreach (Base b in a)
if (b.GetType()==typeof(ClassA))
//do something
else if (b.GetType()==typeof(ClassB))
//do something else
Ich hab mir auch überlegt, ob ich eine Enumeration in Base mache, die
dann den genauen Typ angibt, aber das ist wohl nicht so elegant.
Oder gibt es noch eine andere Möglichkeit das zu implementieren? Danke.
On 7/22/05, Claudius Ceteras <[EMAIL PROTECTED]> wrote:
> > ich stehe grad vor einer neuen Architekturentscheidung, für die
> > Performance sehr wichtig ist, daher die Frage:
> >
> > Wieviel kostet ein Typvergleich, etwa
> > dings.GetType==typeof(DingsKlasse)? Ist so ein Vergleich egal für die
> > Performance oder eher langsam?
>
> Hab es auch noch nicht getestet, aber auf jeden Fall muss dafür ein bzw.
> zwei Typ-Objekt(e) instantiiert werden... Ode werden die vielleicht eh
> instantiiert beim laden der Klassen?!?
>
> Ich könnte mir jedenfalls vorstellen, dass das schneller ist:
> (dings as DingsKlasse) != null
>
> Allerdings ist die Funktionalität leicht anders, da auch Objekte aus
> abgeleiteten Klassen erkannt werden...
>
> Wenn Dir das egal ist, mach mal time das doch mal... (ungetestet)
>
> object[] dinge = new object[]{new object(), new DingsKlasse(), new
> AnotherKlasse(), ...}
>
> Object o = new object();
> int c;
> DateTime start = DateTime.Now;
> for(int it=0; it<1000000; i++)
> {
> for(int i = 0; i++ i<dinge.Count)
> {
> if dinge[i].GetType==typOf(DingsKlasse) c++;
> //if (dings as DingsKlasse) != null c++;
> }
> }
> DateTime end = DateTime.Now;
> TimeSpan zeit = end-start;
> // Dann c und zeit ausgeben
>
>
> Ich inkrementiere c, damit der Vergleich nicht vom Compiler
> wegrationalisiert wird...
>
>
> Claudius
>
> _______________________________________________
> CSharp.net Mailingliste, Postings senden an:
> [email protected]
> An-/Abmeldung und Suchfunktion unter:
> http://www.glengamoi.com/mailman/listinfo/csharp.net
>
--
br
Hannes Sachsenhofer
< http://www.sachsenhofer.com >
_______________________________________________
CSharp.net Mailingliste, Postings senden an:
[email protected]
An-/Abmeldung und Suchfunktion unter:
http://www.glengamoi.com/mailman/listinfo/csharp.net