Abfrage ob Variable deklariert wurde? Null?

Babatune

Mitglied
Hallo,

wie kann ich denn testen ob eine Variable deklariert wurde?

Also wenn ich habe

Code:
string meinString;

if (test == null) {
...
}
funktioniert das nicht sondern ich bekomme vom Compiler Ärger...

Weiß jemand Rat?

Viele Grüße,
Babatune
 
Ich bin jetzt mehr bei VB zu Hause, aber in deinem Beispiel hast du Test doch gar nicht deklariert. Willst du prüfen ob eine Variable deklariert wurde oder ob sie einen Inhalt hat?
 
Ob eine Variable deklariert ist im aktuell sichtbaren Bereich (Scope) sagt dir der Compiler. Die Prüfung, die du machst bezweckt die Abfrage ob es sich bei test um eine Nullreferenz handelt.
 
Also zu testen ob die Variable deklariert wurd geht nicht?

Ich hab mir nämlich eine c# bilbliothek geschrieben auf die ich in vba zugreife.
Jetzt kann es vorkommen dass manche Variablen nicht deklariert werden. (Also nicht dass einfach kein Wert eingetragen wurde sondern dass sie gar nicht erst vorkommen.
Eine Prüfung ob dies der Fall ist kann ich in C# dann nicht machen?

Viele Grüße,
Babatune
 
Hi.
Also zu testen ob die Variable deklariert wurd geht nicht?

Ich hab mir nämlich eine c# bilbliothek geschrieben auf die ich in vba zugreife.
Jetzt kann es vorkommen dass manche Variablen nicht deklariert werden. (Also nicht dass einfach kein Wert eingetragen wurde sondern dass sie gar nicht erst vorkommen.
Eine Prüfung ob dies der Fall ist kann ich in C# dann nicht machen?
Nein, eine solche Prüfung macht in C# keinen Sinn. Du bekommst einen Compilerfehler wenn du versuchst eine Variable zu verwenden die nicht deklariert ist.

Gruß
 
Ich hab mir nämlich eine c# bilbliothek geschrieben auf die ich in vba zugreife.
Aus einer Bibliothek (und eigentlich auch sonst in einer Klasse) sollten überhaupt keine Variablen nach außen zugänglich sein. Dafür gibt es in .NET die Properties, die man auch konsequent einsetzen sollte, um Datenstrukturen nach außen zu präsentieren.
Dann hat man die Möglichkeit mittels Reflection ( :google: ) abzufragen, welche Properties von einer Klasse überhaupt bereitgestellt werden.

Gruß
MCoder
 
Hast du denn mal ein Codebeispiel das veranschaulicht, was du machen möchtest? Denn wie gesagt, ob eine Variable verwendest, die nirgendwo deklariert wurde dann erhälst du ja einen Compilerfehler bereits zu Kompilierzeit, die Prüfung geschieht also automatisch.
 
Hallo,

das schaut bei mir in etwa so aus:

ich habe in C# eine Klasse:

Code:
public class xmlBearbeitung{

  public string mystring1, mystring2,.... ;
  
  public void writeXML(){
  //hier wird in ein xml file mit XMLDocument geschrieben, das schaut dann am Ende bei der Eintragung dann so aus:
  
  mynode.Attributes["meinAttribut"].InnerText = mystring1;
  mynode.Attributes["meinAttribut2"].InnerText = mystring1;

  }
}

dann hab ich noch eine Wrapperklasse
Code:
public class xmlBearbeitung{
private mynamespace.xmlBearbeitung xml = new mynamespace.xmlBearbeitung();

public mynamespace.xmlBearbeitung xmlDaten{
  get { return xml; }
  set { xml = value; }
}

public void writeXML() {
  this.xml.writeXML();
}
}

In Access hab ich dann in VB

Code:
Public Sub Aufruf()
Dim x As New meinnamespaceVB6.xmlBearbeitung

'und so befüll ich die Werte:

Set rs = CurrentDb.OpenRecordset(sqlstring)
Do While Not rs.EOF 
 x.xmlDaten.meinString1 = rs!WertString1
 x.xlmDaten.meinString2 = rs!WertString2
 ...

'und wenn alle Werte eingelesen sind:
x.writeXML

End Sub

Da das sehr viele Werte sind wollt ich das nicht direkt an die Methode übergeben.
Mein Ziel war nun eigentlich, dass falls ein Wert so nicht übergeben wird, dass bei der XML Bearbeitung der Eintrag erhalten bleibt der in meinem zu bearbeitenden XML steht.


Viele Grüße,
Babatune
 
Zuletzt bearbeitet:
Du könntest dazu ja auch ein Dictionary verwenden:
C#:
public class XmlBearbeitung
{
   private Dictionary<string, string> mStrings = new Dictionary<string, string>();

   public void AddString(string attribute, string content)
   {
      if(mStrings.ContainsKey(attribute))
         throw new ArgumentException("Attribute already has a text!"); // kann auch was anderes passieren hier
      mStrings.Add(attribute, content);
   }

   public void WriteXml()
   {
      foreach(var entry in mStrings)
      {
         myNode.Attributes[entry.Key].InnerText = entry.Value;
      }
   }
};

Und dann in VBA:
Visual Basic:
Public Sub Aufruf()
Dim x As New meinnamespaceVB6.xmlBearbeitung
 
'und so befüll ich die Werte:
 
Set rs = CurrentDb.OpenRecordset(sqlstring)
Do While Not rs.EOF 
 x.xmlDaten.AddString("myAttribute1", rs!WertString1)
 x.xlmDaten.AddString("myAttribute2", rs!WertString2)
 ...
 
'und wenn alle Werte eingelesen sind:
x.writeXML
 
End Sub
 

Neue Beiträge

Zurück