Autor Beitrag
flyhigh83
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67

Win 7
C# (VS2010)
BeitragVerfasst: Mo 31.01.11 16:49 
Hallo mal wieder.

Habe hier im Forum und auch schon auf der MSDN Seite gesucht aber irgendwie kappier ich das noch nicht.

Ich habe ein Problem mit Variable welche auch den Wert "null" annehmen können, da in der Datenbank der Wert auch "null" ist. In meiner Form habe ich folgende Abfrage, und will damit eine Liste füllen. Die Liste habe ich mir angelegt, da ich alle Bilder durchgehen will, und schaue, ob sich etwas geändert hat in der DB und wenn, wird das Bild entsprechned einigen fixen vorgaben umbenannt. Mein Problem ist wenn in der Tabelle "Table1" die "steHausnr" den Wert "null" hat, erhalte ich einen Fehler, da mein Wert aus der Klasse nicht null annehmen darf. Dies hatte ich dann abgeändert. Siehe unten.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
var FileQuery = (from table1 in dbDataSet.table1
         select new FileAutoRenamer
      {
       StrasseHausnr = Convert.ToString(table1.steHausnr)
      });
OrdnerBilder.AddRange(FileQuery.ToList());


Meine abgeänderte Klasse
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
public class FileAutoRenamer
  {
    private string? _StrasseHausnr; // *Code Fehler 

    /// <summary>
    /// Getter Setter StrasseHausnr
    /// </summary>
    public string? StrasseHausnr
    {
      get { return this._StrasseHausnr; }
      set
      {
        if (value != null)
        {
          this._StrasseHausnr = value;
        }
        else
          this._StrasseHausnr = " ";
      }
    }
}


Den Fehler den ich jedes mal erhalten beim Kompalieren ist

Fehler 1 Der Typ "string" darf keine NULL-Werte zulassen, wenn er als T-Parameter im generischen Typ oder in der generischen Methode "System.Nullable<T>" verwendet werden soll.

Der Fehler bezieht sich auf siehe Quelltext "*Code Fehler".

Was mache ich falsch. Ich habe bisher nur structs gesehen, welche sich null setzen lasse oder auch ganznormale Variablen, was ich an der Variable in der Klasse anders?
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 31.01.11 16:55 
string ist bereits ein nullable Type. Ein string? macht daher wenig Sinn was dir der Compiler umgehend auch mitteilt.
flyhigh83 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67

Win 7
C# (VS2010)
BeitragVerfasst: Mo 31.01.11 17:06 
user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
string ist bereits ein nullable Type. Ein string? macht daher wenig Sinn was dir der Compiler umgehend auch mitteilt.


Ja das hatte ich auch eigentlich schon gewusst. Aber ich kapier es irgend wie nicht, denn wenn ich es ohne Nullable versuche
sagt er mir sobald er auf etwas stößt was "null" ist

Der Wert für Spalte steHausnr in Tabelle table1 ist DBNull.

Was mache ich also da falsch?
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Mo 31.01.11 17:09 
Naja, DBNull und null ist nicht das selbe.
Normalerweise hast Du für Felder, die nullable sind, eine Methode, worüber Du auf DBNull abfragen kannst.
Diese müsste in Deinem Fall "IssteHausnrNull()" oder so ähnlich heißen.

Für diesen Beitrag haben gedankt: flyhigh83
flyhigh83 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67

Win 7
C# (VS2010)
BeitragVerfasst: Mo 31.01.11 17:37 
user profile iconTrashkid2000 hat folgendes geschrieben Zum zitierten Posting springen:
Naja, DBNull und null ist nicht das selbe.
Normalerweise hast Du für Felder, die nullable sind, eine Methode, worüber Du auf DBNull abfragen kannst.
Diese müsste in Deinem Fall "IssteHausnrNull()" oder so ähnlich heißen.


Danke,

hat mir super weitergeholfen.
Lösung:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
var FileQuery = (from table1 in dbDataSet.table1
         select new FileAutoRenamer
      {
       StrasseHausnr = table1 == null ? null : (table1.IssteHausnrNull() ? null : table1.steHausnr.ToString()),
      });
OrdnerBilder.AddRange(FileQuery.ToList());


Natürlich kann man jetzt die Setter und Gett ganz normal lassen.