2016-08-02 19 views
3

Beide der folgenden Anweisungen testen, ob ein Objekt x vom Typ T ist. Gibt es einen Unterschied, dass man sich der Leistung bewusst sein sollte?Gibt es einen bemerkenswerten Unterschied zwischen 'Ergebnis ist T' vs 'Typof (T). IsInstanceOfType (Ergebnis)'?

var result1 = x is T; 
var result2 = typeof(T).IsInstanceOfType(x); 

Vielen Dank!

+0

Ooops !. Tippfehler. Korrigiert. Und keine spezifische Verwendung. Nur eine neugierige Frage. – MarqueIV

+1

Und warum wurde das abgelehnt? – MarqueIV

Antwort

4

Da IsInstanceOfType eine Methode ist, die eine object übernimmt, würden Werttypen eingerahmt werden. Operator is hingegen führt kein Boxing durch.

Die erste Methode ist besser, wenn Sie zur Kompilierungszeit T kennen, entweder als spezifischer Typ oder als generischer Typparameter. Der zweite Ansatz ist für Situationen vorgesehen, in denen Ihr Code den Typ zur Laufzeit erhält, da der erste Ansatz nicht zutrifft:

+1

Sie meinen [es ist boxed] (https://msdn.microsoft.com/en-us/library/yz2be5wk.aspx). Vielleicht möchten Sie das genauer erläutern, um zu verdeutlichen, warum das schlecht ist. –

+0

Gibt es jemals einen Grund, 'IsInstanceOfType' über' is' zu verwenden? Du hast gerade einen großartigen Fall für das Gegenteil gemacht und jetzt frage ich mich, warum ich jemals das erstere benutzen würde. – MarqueIV

+0

@MarqueIV Ich habe gerade die Antwort bearbeitet, um dies zu erwähnen. – dasblinkenlight