Warum gibt es nicht "ist nicht" Stichwort in c #?

7

Es macht einfach Sinn, manchmal zu überprüfen, ob ein Objekt kein X-Typ ist, also müssen Sie das stattdessen tun:

%Vor%

Was meiner Meinung nach etwas umständlich ist, wäre nicht so etwas schöner:

%Vor%     
dexter 02.12.2010, 21:05
quelle

4 Antworten

20

Was ist mit dem logischen NOT-Operator ! , passt die Beschreibung des Wortes 'nicht' einfach gut:

%Vor%

Wie andere bereits erwähnt haben, wird is auch verwendet, um zu überprüfen, ob die Klasse eines Objekts von einer Klasse erbt oder eine Schnittstelle implementiert, was sich ziemlich von GetType() unterscheidet.

Sowohl CodeInChaos und StriplingWarrior haben vernünftige Erklärungen dafür, warum es nicht gibt ein not Schlüsselwort in C #.

    
BoltClock 02.12.2010, 21:07
quelle
9

Das Hinzufügen eines Schlüsselworts zu einer Sprache erhöht die Komplexität. Das Hinzufügen eines Schlüsselworts zu einer Sprache nach der ursprünglichen Spezifikation könnte zu brechenden Änderungen beim Upgrade führen. Daher werden Keywords in der Regel nur hinzugefügt, wenn es einen sehr starken Fall für sie gibt. In diesem Fall, wie die anderen Antworten darauf hinweisen, ist es sehr einfach, den Bang-Operator zu verwenden:

%Vor%

... was ein typischer C # (/ C / C ++ / Java) Entwickler "wenn nicht (pero ist menschlich)" lesen würde. Es gibt also wenig Gründe für ein spezielles Keyword.

    
StriplingWarrior 02.12.2010 21:12
quelle
5
___ qstnhdr ___ Warum gibt es nicht "ist nicht" Stichwort in c #? ___ answer4339962 ___

Das Hinzufügen eines Schlüsselworts zu einer Sprache erhöht die Komplexität. Das Hinzufügen eines Schlüsselworts zu einer Sprache nach der ursprünglichen Spezifikation könnte zu brechenden Änderungen beim Upgrade führen. Daher werden Keywords in der Regel nur hinzugefügt, wenn es einen sehr starken Fall für sie gibt. In diesem Fall, wie die anderen Antworten darauf hinweisen, ist es sehr einfach, den Bang-Operator zu verwenden:

%Vor%

... was ein typischer C # (/ C / C ++ / Java) Entwickler "wenn nicht (pero ist menschlich)" lesen würde. Es gibt also wenig Gründe für ein spezielles Keyword.

    
___ qstntxt ___

Es macht einfach Sinn, manchmal zu überprüfen, ob ein Objekt kein X-Typ ist, also müssen Sie das stattdessen tun:

%Vor%

Was meiner Meinung nach etwas umständlich ist, wäre nicht so etwas schöner:

%Vor%     
___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die für die Erstellung einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ tag123compilerconstruction ___ Das Tag compiler-construction sollte auf Fragen zur Programmierung von Compilern oder zu Fragen zum detaillierten Innenleben von Compilern angewendet werden. NUTZEN SIE NICHT für Fragen zum * Verwenden * spezifischer Compiler oder Kompilierungsfehler. ___ tag123types ___ Typen und Typsysteme werden verwendet, um Abstraktionsstufen in Programmen zu erzwingen. ___ antwort4339947 ___

Beachten Sie, dass this.GetType() ! = typeof(X) den Wert false zurückgibt, wenn dieser Wert von (oder implementiert im Falle eines Schnittstellentyps), aber nicht identisch mit X ist, während this is X den Wert true zurückgibt.

Und warum gibt es ein separates Schlüsselwort, wenn Sie einfach !(a is X) verwenden können? Das ist Blähungen der Sprache mit wenig Gewinn. Wie Eric Lippert betont, muss jede neue Sprachfunktion genügend Vorteile bieten, um das Codieren, Dokumentieren, Testen und natürlich die erhöhte Komplexität der Sprache zu kompensieren. Und ein Operator not is bietet einfach nicht genug.

Sie könnten eine Erweiterungsmethode implementieren, aber ich denke, das ist dumm:

%Vor%     
___ tag123keyword ___ Schlüsselwörter sind spezielle Wörter, die von einer Sprache als Bezeichner verwendet werden. Sie sind reservierte Wörter, die von einem Compiler oder Interpreter akzeptiert werden, und sollten daher nicht als Variablen- oder Funktionsname verwendet werden (oder nicht). ___ answer4339893 ___

Was ist mit dem logischen NOT-Operator %code% , passt die Beschreibung des Wortes 'nicht' einfach gut:

%Vor%

Wie andere bereits erwähnt haben, wird %code% auch verwendet, um zu überprüfen, ob die Klasse eines Objekts von einer Klasse erbt oder eine Schnittstelle implementiert, was sich ziemlich von %code% unterscheidet.

Sowohl CodeInChaos und StriplingWarrior haben vernünftige Erklärungen dafür, warum es nicht gibt ein %code% Schlüsselwort in C #.

    
___ answer4339897 ___

Benutze ein gutes ol 'bang Symbol:

%Vor%

BTW, %code% ist anders, weil es nicht nur die leaf-abgeleitete Klasse, sondern die ganze Hierarchie davon, sowohl die Schnittstellen als auch die Klassen, abfängt.

Also, für

%Vor%     
___
CodesInChaos 02.12.2010 21:10
quelle
4

Benutze ein gutes ol 'bang Symbol:

%Vor%

BTW, is ist anders, weil es nicht nur die leaf-abgeleitete Klasse, sondern die ganze Hierarchie davon, sowohl die Schnittstellen als auch die Klassen, abfängt.

Also, für

%Vor%     
Daniel Mošmondor 02.12.2010 21:07
quelle