2017-10-13 3 views
5

Ich fange an, diese Aussagen zu sehen, und ich versuche, meinen Kopf um diese Art von Aussagen zu wickeln.Was macht diese Syntax? if (obj ist SomeType obj2)

Wenn ich richtig verstehe, werfen wir im Grunde Obj in das variable Auto, das ein Typ "SomeAuto" wäre?

1) Wie lautet die offizielle Terminologie dieser Aussage?

2) Was würde passieren, wenn ich die if-Anweisung ändern wollte, um aus einem bestimmten Grund bedingt auszuführen?

Zum Beispiel SomeAuto ist eine Basisklasse und ich wollte nur eine bestimmte Art von Auto, oder sagen, ich möchte alle SomeAuto außer vielleicht eine bestimmte Art.

+0

Siehe https://StackOverflow.com/questions/184681/is-vs-typeof –

+3

Sieht aus wie der Muster Typ C# 7: https://docs.microsoft.com/en-us/dotnet/csharp/ Sprachreferenz/keywords/is # type – UnholySheep

+0

UnholySheep antwortete 1), für 2) würden Sie wahrscheinlich ein anderes Muster benötigen. – Fildor

Antwort

6

Diese if-Anweisung verwendet den Ausdruck is, der in C# 7.0 under pattern matching hinzugefügt wurde. Docs geben Folgendes an:

Der Musterausdruck erweitert den bekannten Operator is, um ein Objekt über seinen Typ hinaus abzufragen.

Damit können Sie überprüfen, ob obj einen bestimmten Typ hat und das Ergebnis in eine Variable zuweisen.


Bevor diese Funktion, die Sie wahrscheinlich schreiben würde:

var car = obj as SomeAuto; 
if(car != null) 
{ 
    //Do Stuff 
} 

Wie @BurnBA einen Unterschied wies darauf hin, wenn die as als das Original is ist, dass Beachten Sie, dass die als Operator nur Referenz führt Conversions, Nullable-Conversions und Boxing-Conversions und können daher nicht zum Überprüfen von nicht nullbaren Werttypen verwendet werden.

+0

eh, kleine Einschränkung, 'as' funktioniert nur mit Referenztypen, während' is' für Dinge wie 'int' verwendet werden kann. – BurnsBA

+0

@BurnsBA - Guter Kommentar. Wenn Sie einen Hinweis darauf bringen könnten, werde ich meine Antwort entsprechend aktualisieren. –

+2

" Hinweis Der as-Operator führt nur Referenzkonvertierungen, nullable Conversions und Boxing-Conversions durch. Der as-Operator kann keine anderen Conversions durchführen, z. B. benutzerdefinierte Conversions, die stattdessen mithilfe von Cast-Ausdrücken durchgeführt werden sollen. "https: // docs. Microsoft.com/de-de/dotnet/csharp/sprache-reference/keywords/as – BurnsBA