Announcement

Collapse
No announcement yet.

string nullable oder nicht?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • string nullable oder nicht?

    Hi,

    ich bin neu in C# (komme eigentlich aus der Java Welt) und bin gerade ein wenig verwirrt, weil mir in VS eine Warnung angezeigt wird, dass eine string Membervariable beim Beenden des Konstruktors einen Wert ungleich null enthalten muss.

    Einmal davon abgesehen, dass ich in der Meinung war, dass ein string durchaus null sein kann, verwirrt es mich, weil in meinem Konstruktor ein Property "Name" gesetzt wird, in dessen set Methode die besagte Membervariable _name gesetzt wird. Mir ist klar, dass ich VS so konfigurieren kann, dass die Warnung unterdrückt wird, aber ich würde gerne verstehen, warum ich diese Warnung bekomme:

    Code:
        internal class Album : AbstractDataObject
        {
            // Constants
            private const string DEFAULT_NAME = "<album name>";
    
            // Member variables
            private string _name;
    
            // Properties
            public string Name
            {
                get { return _name; }
                set
                {
                    _name = value;
                    IsModified = true;
                }
            }
    
            public Album() 
            {
                Name = DEFAULT_NAME;
            }
        }
    Kann mir jemand von euch auf die Sprünge helfen, wo das Problem hier liegt?

    Gruß
    Andreas

  • #2
    Name ist nicht _name
    Name = DEFAULT_NAME;

    _name wird im Konstrukor nicht belegt.
    In Java wird ebenfalls ein "not initialized" angezeigt und null sein kann sie, muss aber belegt werden _name=null;
    Zuletzt editiert von Christian Marquardt; 22.04.2023, 06:38.
    Christian

    Comment


    • #3
      "dass ich in der Meinung war, dass ein string durchaus null sein kann, "

      Da hast du Recht nur der Compiler weißt dich explizit darauf hin das der hier null sein kann.
      Das tut der weil bei dir der "Nullable Context" eingeschaltet ist, findest du in den Projektoptionen irgendwas mit nullable weiß nicht wie das auf deutsch heißen könnte.
      Da bekommst du immer eine Warnung wenn ein Referenztyp irgendwo null sein kann und das nicht berücksichtigt wird.

      2 Optionen
      a.) Schalte den ab
      b.) zeichne die Referenzentypen von denen du weißt (oder willst) das die null sein können mit einem ? aus.
      Hier also sowohl das Backingfield als auch die Property mit string? um zu sagen ja dieser string kann hier null sein. (auch wenn wir wissen das er es eigentlich nicht kann siehe Christians Antwort der Hintergrundcompiler ist einfach nicht schlau genug)






      Comment

      Working...
      X