wake-up-neo.net

Was ist der Zweck eines Fragezeichens nach einem Typ (zum Beispiel: int? MyVariable)?

Normalerweise wird das Fragezeichen hauptsächlich für die Bedingung x ? "yes" : "no" Verwendet.

Aber ich habe eine andere Verwendung dafür gesehen, kann aber keine Erklärung für diese Verwendung des Operators ? Finden.

public int? myProperty
{
   get;
   set;
}
405
GenEric35

Dies bedeutet, dass der betreffende Werttyp ein nullbarer Typ ist

Nullable-Typen sind Instanzen der System.Nullable-Struktur. Ein nullfähiger Typ kann den korrekten Wertebereich für den zugrunde liegenden Wertetyp sowie einen zusätzlichen Nullwert darstellen. Zum Beispiel ein Nullable<Int32>, ausgesprochen "Nullable of Int32", kann ein beliebiger Wert von -2147483648 bis 2147483647 zugewiesen werden, oder es kann der Nullwert zugewiesen werden. EIN Nullable<bool> können die Werte true, false oder null zugewiesen werden. Die Möglichkeit, numerischen und booleschen Typen Null zuzuweisen, ist besonders nützlich, wenn Sie mit Datenbanken und anderen Datentypen arbeiten, die Elemente enthalten, denen möglicherweise kein Wert zugewiesen wurde. Beispielsweise kann ein Boolesches Feld in einer Datenbank die Werte true oder false speichern oder 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);
      }
  }
}
410
Sean

Es ist eine Abkürzung für Nullable<int> . Nullable<T> ermöglicht das Setzen eines Wertetyps auf null. Werttypen normalerweise kann nicht null sein .

112

Im

x ? "yes" : "no"

das ? deklariert einen if Satz. Hier: x repräsentiert die Boolesche Bedingung; Der Teil vor dem : ist der dann Satz und der Teil nach dem sonst Satz.

In zum Beispiel

int?

das ? deklariert einen nullfähigen Typ und bedeutet, dass der Typ davor einen Nullwert haben kann.

57
eKek0

Nullable Types

Nullable-Typen sind Instanzen der System.Nullable-Struktur. Ein nullwertfähiger Typ kann den normalen Wertebereich für den zugrunde liegenden Wertetyp sowie einen zusätzlichen Nullwert darstellen. Zum Beispiel ein [Nullable<Int32>], ausgesprochen "Nullable of Int32", kann ein beliebiger Wert von -2147483648 bis 2147483647 zugewiesen werden, oder es kann der Nullwert zugewiesen werden. EIN [Nullable<bool>] können die Werte true oder false oder null zugewiesen werden. Die Möglichkeit, numerischen und booleschen Typen Null zuzuweisen, ist besonders nützlich, wenn Sie mit Datenbanken und anderen Datentypen arbeiten, die Elemente enthalten, denen möglicherweise kein Wert zugewiesen wurde. Beispielsweise kann ein Boolesches Feld in einer Datenbank die Werte true oder false speichern oder undefiniert sein.

48
Ahmet Kakıcı

es gibt an, dass der Typ nullwertfähig ist.

11

praktische Anwendung:

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

  return someFunctionThatHandlesIntAndReturnsString(value);
}
6
A.J.Bauer

Um die obigen Antworten zu ergänzen, finden Sie hier ein Codebeispiel

struct Test
{
    int something;
}
struct NullableTest
{
    int something;
}
class Example
{
    public void Demo()
    {
        Test t = new Test();
        t = null;

        NullableTest? t2 = new NullableTest();
        t2 = null;
    }
}

Dies würde einen Kompilierungsfehler ergeben:

Fehler 12 Null kann nicht in 'Test' konvertiert werden, da es sich um einen nicht nullwertfähigen Werttyp handelt

Beachten Sie, dass für NullableTest kein Kompilierungsfehler vorliegt. (Beachten Sie das? in der Deklaration von t2)

3

int? steht für Nullable<int>. Die beiden Formen sind austauschbar.

Nullable<T> ist ein Operator, den Sie mit einem Werttyp T verwenden können, damit er null akzeptiert.

Falls Sie es nicht wissen: Werttypen sind Typen, die Werte wie int, bool, char usw. akzeptieren.

Sie können keine Referenzen auf Werte akzeptieren: Sie würden einen Fehler beim Kompilieren erzeugen, wenn Sie ihnen ein null zuweisen, im Gegensatz zu Referenztypen , das dies offensichtlich akzeptieren kann.

Warum brauchst du das? Weil Ihre Werttypvariablen manchmal Nullreferenzen empfangen konnten, die von etwas zurückgegeben wurden, das nicht sehr gut funktionierte, wie eine fehlende oder undefinierte Variable, die von einer Datenbank zurückgegeben wurde.

Ich empfehle Ihnen, die Microsoft-Dokumentation zu lesen, da sie das Thema ziemlich gut abdeckt.

2
Nicola Amadio