573 Stimmen

Welchen Zweck hat ein Fragezeichen nach einem Typ (zum Beispiel: int? myVariable)?

In der Regel wird das Fragezeichen hauptsächlich für das Konditional verwendet, x ? "yes" : "no" .

Aber ich habe eine andere Verwendung gesehen, kann aber keine Erklärung für diese Verwendung des ? Operator, zum Beispiel.

public int? myProperty
{
   get;
   set;
}

3 Stimmen

Es gibt entsprechende Fragen für Referenztyp - stackoverflow.com/questions/69433546/

1 Stimmen

Er verweist darauf, dass der Wertetyp (hier int?) ein nullbarer Typ ist.

554voto

Sean Punkte 58522

Es bedeutet, dass der betreffende Werttyp ein löschbarer Typ

Nullable-Typen sind Instanzen der System.Nullable-Struktur. A Nullable-Typ kann den korrekten Wertebereich für seinen zugrundeliegenden Werttyp darstellen, plus einen zusätzlichen Nullwert. Zum Beispiel kann ein Nullable<Int32> ausgesprochen "Nullable of Int32", kann ein beliebiger Wert von -2147483648 bis 2147483647 zugewiesen werden, oder es kann der Wert Null zugewiesen werden. Wert zugewiesen werden. A Nullable<bool> können die Werte true, false, oder null. Die Möglichkeit, numerischen und booleschen Typen den Wert null zuzuweisen, ist besonders nützlich, wenn Sie mit Datenbanken und anderen Datentypen arbeiten die Elemente enthalten, denen kein Wert zugewiesen werden darf. Für Beispiel: Ein boolesches Feld in einer Datenbank kann die Werte true oder false speichern false speichern, oder es kann undefiniert sein.

class NullableExample
{
  static void Main()
  {
      int? num = null;

      // Is the HasValue property true?
      if (num.HasValue)
      {
          System.Console.WriteLine("num = " + num.Value);
      }
      else
      {
          System.Console.WriteLine("num = Null");
      }

      // y is set to zero
      int y = num.GetValueOrDefault();

      // num.Value throws an InvalidOperationException if num.HasValue is false
      try
      {
          y = num.Value;
      }
      catch (System.InvalidOperationException e)
      {
          System.Console.WriteLine(e.Message);
      }
  }
}

3 Stimmen

Verwendet für struct. Ich glaube nicht, dass es für Klassen wirklich nützlich ist.

12 Stimmen

@MonsieurDart - deshalb steht in der Antwort "Werttyp".

0 Stimmen

Warum hat C# dies, wenn die meisten Primitiven bereits einen nullbaren Typ haben (z.B. int/Integer, double/Double, etc.)?

150voto

Klaus Byskov Pedersen Punkte 111081

Es ist eine Kurzform für Nullable<int> . Nullable<T> wird verwendet, um einen Wertetyp zu ermöglichen, der auf null . Werttypen in der Regel kann nicht null sein .

3 Stimmen

Der zweite Satz verwirrt mich. Was meinen Sie mit "kann nicht"? Auf der Ebene des Compilers oder im Anwendungskontext.

6 Stimmen

@problemofficer per Definition, value types kann nicht null sein. Wenn Sie einen int oder einen bool deklarieren (die Werttypen sind), ohne ihnen ausdrücklich einen Wert zuzuweisen, haben sie trotzdem Werte (0 bzw. false), d. h. sie sind nicht null. Nicht zugewiesene reference types wie z. B. object oder MyClass, ist dagegen null. Vielleicht sollten Sie sich über den Unterschied zwischen Werttypen und Referenztypen informieren.

69voto

eKek0 Punkte 22479

Unter

x ? "yes" : "no"

die ? deklariert eine wenn Satz. Hier: x steht für die boolesche Bedingung; der Teil vor der : ist die dann Satz und der Teil danach ist der sonst Satz.

Zum Beispiel in,

int?

die ? deklariert einen nullbaren Typ und bedeutet, dass der Typ vor ihm einen Nullwert haben kann.

13 Stimmen

Ich sehe keinen Zusammenhang zwischen dem '?', das einen nullbaren Typ angibt, und einem ternären Ausdruck. Stimmen Sie Ihre Antwort ab, Sir.

49 Stimmen

Ich bin mit dem obigen Kommentar von Gus nicht einverstanden. Die Frage zeigt, dass es eine mögliche Verwechslung mit dem ternären Ausdruck gibt. Diese Antwort geht auf dieses Problem ein.

0 Stimmen

Wo würden Sie diese Art des Nullvergleichs verwenden? Innerhalb einer Rückgabe scheint es nicht erlaubt zu sein. return value ? value : "isNull"; sagt mir, dass string value ist nicht in bool umwandelbar.

19voto

Wird erklärt, dass der Typ nullbar ist.

7voto

A.J.Bauer Punkte 2587

Praktische Anwendung:

public string someFunctionThatMayBeCalledWithNullAndReturnsString(int? value)
{
  if (value == null)
  {
    return "bad value";
  }

  return someFunctionThatHandlesIntAndReturnsString(value);
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X