Laden...

InvalidCastException ohne cast

Erstellt von True vor 18 Jahren Letzter Beitrag vor 18 Jahren 1.813 Views
T
True Themenstarter:in
5 Beiträge seit 2005
vor 18 Jahren
InvalidCastException ohne cast

Hallo

Ich bin verzweilfelt. Ich muss für die uni ein so ein Blödes Mazegame schreiben. Da hab ich meine nette Class library, die eigentlich hervorragend funktioniert. Jetzt habe ich eine Windows appliction geshrieben, welche auf einem einfachen windows form in der OnPaint methode die maze mit linien auf das Form zeichnet. das funktioniert soweit auch wenn ich das Programm aber sarte sieht man kurz das Form und dann kommt sofrt einen unbahandelte Exception des Typs InvalidCastException und VS zeigt mir auf die Geschwungene klammer nach Application.Run(xx); also ans ende der main funktion. Und ich habe keine ahnung woran das liegt.

Habt ihr irgent eine idee?

übrigens ich caste nix im ganzen programm.

Edit: ich glaube es liegt daran dass ich irgentwo aus der Form rauszeichne, aber das dürfte keine probleme machen, normal.

17 Beiträge seit 2006
vor 18 Jahren

Wenn die Exception dein Programm nicht zum Absturz bringt, dann fang sie lieber mit catch ab und verarbeite sie nicht. Ich weiß, dass es unsauber ist und keine richtige Lösung ist. Andernfalls such einfach mal mit dem Debugger.

T
True Themenstarter:in
5 Beiträge seit 2005
vor 18 Jahren

Sie bringt das Programm aber zum absturz. Also Abfangen bringt mich nicht weiter.

17 Beiträge seit 2006
vor 18 Jahren

Dann würde ich dir mal raten ein bisschen Code zu posten, damit man dein Problem überhaupt lösen kann ohne etwas zu Vermuten.

Q
992 Beiträge seit 2005
vor 18 Jahren

Gibt es noch genauere Infos zu der Exception?

Mach mal ein Breakpoint auf den Konstruktor der Form und steppe durch.
Das hilft bestimmt!

Wahrscheinlich ist der Fehler nämlich in dem new XYXForm() angesiedelt.

Ich hoffe, dass das hilft.

Grüße, Christoph

T
True Themenstarter:in
5 Beiträge seit 2005
vor 18 Jahren

Ok jetzt ist etwas komisches passiert, ich habe eine if mit einem fehehl dahinter, das habe ich jetzt in {} geklammert. jetzt läufts ohne fehler o.O

das war alles in der onpaint methode. so ein blödsinn, ich glaube die runteime wei selbs nicht was sie will.

6.862 Beiträge seit 2003
vor 18 Jahren

Die weiß was sie will 😉 Schreib mal nen Stück Code und wir können dir auch sagen wo der Fehler lag.

Baka wa shinanakya naoranai.

Mein XING Profil.

T
True Themenstarter:in
5 Beiträge seit 2005
vor 18 Jahren

in diesem Stück war der fehler:

Ausschnitt aus OnPaint(PaintEventArgs e)


float xfrak= this.ClientRectangle.Width/myMaze.X;
float yfrak= this.ClientRectangle.Height/myMaze.Y;	
for(int j=0;j<myMaze.Y;j++)
				{
					for (int i=0;i<myMaze.X;i++)
					{
						if(myMaze.Rooms[j,i].GetSide(TheMaze.Direction.East) is TheMaze.Wall)
							e.Graphics.DrawLine(new Pen( new SolidBrush(Color.Black), 2),(i+1)*xfrak,j*yfrak,(i+1)*xfrak,(j+1)*yfrak);
						else if(!((TheMaze.Door)myMaze.Rooms[j,i].GetSide(TheMaze.Direction.East)).IsOpen)
							e.Graphics.DrawLine(new Pen( new SolidBrush(Color.LightGoldenrodYellow), 1),(i+1)*xfrak,j*yfrak,(i+1)*xfrak,(j+1)*yfrak);
						if(myMaze.Rooms[j,i].GetSide(TheMaze.Direction.South)is TheMaze.Wall)
							e.Graphics.DrawLine(new Pen( new SolidBrush(Color.Black), 2),i*xfrak,(j+1)*yfrak,(i+1)*xfrak,(j+1)*yfrak);
						else if(!((TheMaze.Door)myMaze.Rooms[j,i].GetSide(TheMaze.Direction.South)).IsOpen)
							e.Graphics.DrawLine(new Pen( new SolidBrush(Color.LightGoldenrodYellow), 1),i*xfrak,(j+1)*yfrak,(i+1)*xfrak,(j+1)*yfrak);
						
					}
				};

Also ich hab die klammern bie der If wieder wegemacht, und alles läuft.

6.862 Beiträge seit 2003
vor 18 Jahren

Ich würde dir empfehlen auch, wenns nicht nötig ist, immer die Klammen zu benutzen bei solch einzeiligen Code. Ist einfach besser lesbarer und nicht so fehlerträchtig.

Baka wa shinanakya naoranai.

Mein XING Profil.

T
True Themenstarter:in
5 Beiträge seit 2005
vor 18 Jahren

normal klammere ich alles und jeden, aber in diesem fall schauts ohne klammern erträglicher aus. sonst ist man irentwann aus dem rechten bildschirmrand verschwunden und sieht nur noch
{
{
{
{

usw.

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo True,

ich klammere auch immer alles, mit einer Ausnahme: Wenn auf ein else direkt ein if folgt.

Mit dieser Vorgehensweise würde auch dein Code nur max eine Ebene eingerückt und wäre trotzdem besser lesbar.


if (...) {
   //...
} else if (...) {
   //...
} else {
   //...
}

herbivore

S
8.746 Beiträge seit 2005
vor 18 Jahren

Hier ist dein Cast:

if(!(**(TheMaze.Door)**myMaze.Rooms[j,i].GetSide(TheMaze.Direction.East)).IsOpen)...

Davor kommt noch eine "is"-Abfrage, die wohl sicherstellen soll, dass der Cast ok ist...