Warum kann ich 1 als Short übergeben, aber nicht die int-Variable i?

user34537

Warum funktioniert das erste und zweite Schreiben, aber nicht das letzte? Gibt es eine Möglichkeit, alle 3 zuzulassen und festzustellen, ob es 1, (int) 1 war oder ich übergeben habe? Und warum darf man nur den letzten? Das zweite erlaubt, aber nicht das letzte, hat mich wirklich umgehauen.

Demo zur Anzeige eines Kompilierungsfehlers

using System;
class Program
{
    public static void Write(short v) { }
    static void Main(string[] args)
    {
        Write(1);//ok
        Write((int)1);//ok
        int i=1;
        Write(i);//error!?
    }
}
CodesInChaos

Die ersten beiden sind konstante Ausdrücke, der letzte nicht.

Die C # -Spezifikation ermöglicht eine implizite Konvertierung von int nach short für Konstanten, jedoch nicht für andere Ausdrücke. Dies ist eine vernünftige Regel, da der Compiler für Konstanten sicherstellen kann, dass der Wert in den Zieltyp passt, für normale Ausdrücke jedoch nicht.

Diese Regel steht im Einklang mit der Richtlinie, dass implizite Conversions verlustfrei sein sollten.

6.1.8 Implizite Konvertierungen konstanter Ausdrücke

Eine implizite Konvertierung konstanter Ausdrücke ermöglicht die folgenden Konvertierungen:

  • Ein konstanter Ausdruck (§7.18) vom Typ intTyp umgewandelt werden kann sbyte, byte, short, ushort, uint, oder ulong, sofern der Wert des konstanten Ausdrucks innerhalb des Bereichs des Zieltypen.
  • Ein konstanter Ausdruck vom Typ longkann in Typ konvertiert werden ulong, vorausgesetzt, der Wert des konstanten Ausdrucks ist nicht negativ.

(Zitiert aus C # Language Specification Version 3.0)

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Warum kann ich dies nicht als Variable an einen Ereignishandler übergeben?

Warum kann ich die Jquery-Variable nicht an PHP übergeben?

Warum kann ich ein Elementattribut nicht an scope übergeben. $ Watch, aber ich kann eine Funktion übergeben, die es zurückgibt

Warum kann ich ein `func () [] int` nicht als` func () [] interface {}` in go übergeben?

Warum kann ich ein Int größer als MAXINT hexadezimal darstellen, aber nicht dezimal?

Warum kann ich eine Liste, die als Argument in einer Funktion übergeben wurde, nicht ändern?

Warum kann ich "push" nicht als foreach-Funktion übergeben?

Warum kann ich eine gebundene Mitgliedsfunktion nicht als aufrufbar übergeben?

Warum kann ich eine int-Variable "captureless-capture", aber kein nicht-capturing Lambda?

Warum kann ich eine Ganzzahl als Aufgabenparameter übergeben, aber keine Strukturvariable übergeben?

Warum kann ich ein int mit einem Wert über 127 an ein char-Array übergeben, aber nicht direkt?

Ich kann keine Dateien hochladen, die größer als 10 MB sind, aber ich verstehe nicht warum?

Warum kann ich meine Variable nicht an Applescript übergeben?

Terraform kann die Liste in bash Linux nicht als Variable übergeben

Warum funktioniert die Typanmerkung für Int als Double, aber nicht als Int?

Warum kann ich nicht 'int' als Typ einer ArrayList haben?

Warum kann ich nicht direkt mit (@_) arbeiten und warum werden beim Erstellen von $item die übergebenen Werte nicht als Skalar übergeben?

Ich kann die Vorlagenfunktion nicht direkt an std :: apply übergeben, aber ich kann über Lambda

Warum kann die Verwendung von Short ohne Vorzeichen langsamer sein als die Verwendung von int?

Warum kann ich @ objc-Protokolle als schwache Eigenschaften deklarieren, aber nicht als schnelle Protokolle?

Wie kann der Zugriff auf die Methode nur als Delegat übergeben, aber nicht ausgeführt werden?

Warum kann ich nicht 1.toString () machen, aber ich kann var a = 1 machen; a.toString ()

Wie kann ich das aktuell wiedergegebene Indexelement aus der Liste entfernen, aber die Variable 'i' ist jetzt 1 und nicht 0?

Warum kann ich console.log in Chrome (und Safari) nicht als Rückrufargument übergeben?

Warum kann ich ein Typmitglied einer Klasse nicht als Vorlagenparameter übergeben?

Warum kann ich std::make_unique<S> nicht als Funktionsparameter übergeben?

Warum kann ich ein Array (innerhalb eines Arrays) nicht als Argument übergeben?

Warum kann ich ein implizit entpacktes optionales Element nicht als UnsafeMutablePointer übergeben?

Warum kann ich nicht string * anstelle von string [] als Argument übergeben?

TOP Liste

  1. 1

    Modbus Python Schneider PM5300

  2. 2

    Wie schließe ich mehrere Ordner mit der Variablen EXTRA_ARGS aus?

  3. 3

    Wie kann eine gleichmäßige Lastverteilung in ElasticSearch mit Indizes mit unterschiedlicher Anzahl von Shards erreicht werden?

  4. 4

    Elasticsearch startet nicht nach dem Laden in viele Daten

  5. 5

    ElasticSearch - Knotensperren konnten nicht abgerufen werden

  6. 6

    Wie konvertiere ich einen Vektor von Bytes (u8) in eine Zeichenfolge?

  7. 7

    Eclipse Oxygen - Projekte verschwinden

  8. 8

    Wie kann ich den Kaskadenmodus global einstellen?

  9. 9

    ElasticSeach Auto Complete mit dem Vervollständigungsvorschlag, um das vollständige Dokument zurückzugeben

  10. 10

    ElasticSearch BulkShardRequest ist aufgrund von org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor fehlgeschlagen

  11. 11

    Bester Crawler, um festzustellen, ob er mit Technologien gebaut wurde?

  12. 12

    So erhalten Sie eine gleichmäßige Höhe für alle Eingabefelder

  13. 13

    Python: Spalten mit demselben Namen zusammenführen, wobei der Mindestwert beibehalten wird

  14. 14

    Wie füge ich eine Spalte in einer Zeile in der Ansible Jinja2-Vorlage mit der for-Schleife hinzu?

  15. 15

    Wie Verwenden von Httpclient mit jedem SSL-Zertifikat, egal wie „schlecht“ es ist

  16. 16

    Wie kann man eine Multi-Container-Anwendung in Steuerkarten erstellen?

  17. 17

    Ärgerliches Problem mit yaml, das ich nicht lösen kann

  18. 18

    Wie konvertiert man einen Datenrahmen im langen Format in eine Liste mit einem geeigneten Format?

  19. 19

    Gruppieren Sie Datenrahmenspalten nach ihrem Datum (die Spaltentitel enthalten) und fassen Sie die Instanzen von Einsen und Nullen in R . zusammen

  20. 20

    Wie erstelle ich einen neuen übergeordneten Knoten außerhalb der .ref (/ path) in der Firebase-Echtzeitdatenbank mithilfe von Cloud-Funktionen (Typescript)?

  21. 21

    So erstellen Sie ein langes Etikett inline mit einem Eingabefeld

heißlabel

Archiv