Rcihtige Anordnung mit try-Catch um Konstruktor

gabifi

Mitglied
Hallo,

kann mir bitte jemand sagen, wie ich mit try-catch einen Fehel beim Erzeugen eines Objektes anfangen kann.

Schreibe ich so
Code:
try
{
	System.Xml.XPath.XPathDocument	xp = new System.Xml.XPath.XPathDocument(m_strInputFile);
}
catch (XmlException ex)
{
	MessageBox.Show(ex.ToString());
}
myTransform.Transform(xp));

dann kann ich im nachfolgenden Code nicht auf die Variebale zugreifen.
Wo muss ich das denn dann machen? Steh grad ganz gewaltig aufm Schlauch

Danke
Gabriel
 
Naja du hast deine Variable xp in einem anderen Scope, sprich "Sichtbereich". Lokale Variablen werden nach ihren Endekennungsbereich "}" gepopt, wenn du verstehst...

Deswegen wäre solche Lösung besser:

Code:
System.Xml.XPath.XPathDocument	xp;

try
{
  xp = new System.Xml.XPath.XPathDocument(m_strInputFile);
}
catch (XmlException ex)
{
  MessageBox.Show(ex.ToString());
}
myTransform.Transform(xp));
 
Hallo,

irgendwie sieht mir das ganze nach C# aus. Wenn ja bist du hier im falschen
Unterforum...

Wegen der Exceptions:
Besser ist so:
C#:
try
{
  System.Xml.XPath.XPathDocument xp = new System.Xml.XPath.XPathDocument(m_strInputFile);
  myTransform.Transform(xp); 
}
catch (XmlException ex)
{
  MessageBox.Show(ex.ToString());
}

da so der Methode Transform in jedem Fall ein gültiger Referenzwert übergeben
wird...

Falls ich mich wegen der C# Annahme getäuscht haben sollte:

In C++ gilt:
1.) Exception als Referenz zu fangen.
2.) xp sollte ein Zeiger und kein Objekt sein, so wie bei dir dürfte dein Programm
gar nicht kompilieren.


Gruß

RedWing
 
RedWing hat gesagt.:
2.) xp sollte ein Zeiger und kein Objekt sein, so wie bei dir dürfte dein Programm gar nicht kompilieren.
Bei C# gibt es keine Zeiger, der Compiler hat also kein Problem mit dem Code ;)

Gruß
MCoder
 
Danke schon mal für die Antworten.

Und stimmt, ist C#, aber ich hab da auf die schnelle kein Forum für C# gefunden...in welches muss ich denn damit?

Hatte es au erst so wie der Vorschlag von Krypthonas, aber da hat der Compiler gemeckert.
 
Hallo,
MCoder hat gesagt.:
Bei C# gibt es keine Zeiger, der Compiler hat also kein Problem mit dem Code ;)
RedWing hat gesagt.:
In C++ gilt:
1.) ...
2.) ...
:-P ;)
gabifi hat gesagt.:
Und stimmt, ist C#, aber ich hab da auf die schnelle kein Forum für C# gefunden...in welches muss ich denn damit?
Werf mal einen Blick ins .NET Forum, da wird dir bestimmt auch und eventuell
besser geholfen ;)
http://www.tutorials.de/forum/net/

Gruß

RedWing
 
ok, danke, in Zukunft schau ich mich mal da um.

Code:
 System.Xml.XPath.XPathDocument    xp = null;
 
 try
 {
   xp = new System.Xml.XPath.XPathDocument(m_strInputFile);
 }
 catch (XmlException ex)
 {
   MessageBox.Show(ex.ToString());
 }
 myTransform.Transform(xp));
So gehts übrigens.
 
Hallo,
gabifi hat gesagt.:
ok, danke, in Zukunft schau ich mich mal da um.

Code:
 System.Xml.XPath.XPathDocument    xp = null;
 
 try
 {
   xp = new System.Xml.XPath.XPathDocument(m_strInputFile);
 }
 catch (XmlException ex)
 {
   MessageBox.Show(ex.ToString());
 }
 myTransform.Transform(xp));
So gehts übrigens.

ich weiß ja nicht wie deine Transform Methode ausschaut, aber wenn dir bei der Konstruktion des Objektes xp eine Exception geworfen wird, wird dir das Programm in der Transform
Methode dann abkrachen weil xp den Wert null hat...
Mach es doch so:
Code:
 try
 {
   System.Xml.XPath.XPathDocument xp = new System.Xml.XPath.XPathDocument(m_strInputFile);
   myTransform.Transform(xp));
 }
 catch (XmlException ex)
 {
   MessageBox.Show(ex.ToString());
 }

Gruß

RedWing
 
Zuletzt bearbeitet:
Zurück