Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   C# ist komisch (https://www.delphipraxis.net/75819-c-ist-komisch.html)

Boombuler 25. Aug 2006 11:32


C# ist komisch
 
Hi

ich hab gerad mal was sonderlich cooles entdeckt!
Bin gerad dabei Code von Delphi auf C# zu portieren dabei ist mir ein kleiner Fehler unterlaufen...

Code:
{
    string var1 = "2004";
    string var2 = "2006";
    string var3 = var1 + '-' + var2;
    label1.Text = var3;
}
Ok ich hätte dran denken sollen, das man Strings in C# mit " einleitet und nicht mit ' aber was denkt ihr was bei mir nachher im Label1 stand???

Antwort: 4055

Die Lösung ist: 2004 + 2006 + Ord('-')

:wiejetzt:

Ich frag mich ob das n Mangel in der Sprache oder im Compiler ist das er mir sowas ermöglicht!

Greetz
Boombuler

PS: Bitte nich wundern das ich n bischen ohne Zusammenhang schreib ich bin noch geschockt von dieser Aktion! :pale:

CK_CK 25. Aug 2006 11:35

Re: C# ist komisch
 
Das ist eine ganz einfache Regel: Strings, die nur ein Zeichen enthalten dürfen mit ''-Zeichen geschrieben werden. Das funktioniert z.B. auch mit "Hallo"+'\n', weil \n nur ein Zeichen darstellt. Der Modale wert wird genommen, weil im ganzen String kein Buchstabe vorkommt und der Kompiler deswegen "gedacht" hat, du wolltest rechnen...

JasonDX 25. Aug 2006 11:51

Re: C# ist komisch
 
Zitat:

Zitat von Boombuler
Hi

ich hab gerad mal was sonderlich cooles entdeckt!
Bin gerad dabei Code von Delphi auf C# zu portieren dabei ist mir ein kleiner Fehler unterlaufen...

Code:
{
    string var1 = "2004";
    string var2 = "2006";
    string var3 = var1 + '-' + var2;
    label1.Text = var3;
}
Ok ich hätte dran denken sollen, das man Strings in C# mit " einleitet und nicht mit ' aber was denkt ihr was bei mir nachher im Label1 stand???

Antwort: 4055

Die Lösung ist: 2004 + 2006 + Ord('-')

Kann ich nicht nachvollziehn :gruebel:
Bei mir steht da ganz normal "2004-2006" im Label, so wie es sein sollte.

Zitat:

Zitat von CK_CK
Das ist eine ganz einfache Regel: Strings, die nur ein Zeichen enthalten dürfen mit ''-Zeichen geschrieben werden.

'\n' ist kein string :warn: Das ist ein char! Strings werden mit doppelten Hochkommas gekennzeichnet, und wenn ich einen String, also einen nicht ordinalen Typ will, (auch wenn er nur ein Zeichen lang ist), dann nehm ich die <">, wenn ich hingegen einen char will, der immer eine konstante groesse hat, den ich auf nen int casten kann, dann nehme ich <'>.

Zitat:

Zitat von CK_CK
Der Modale wert wird genommen, weil im ganzen String kein Buchstabe vorkommt und der Kompiler deswegen "gedacht" hat, du wolltest rechnen...

Das will ich aber nicht hoffen! Wenn ich rechnen will, nehm ich integer, und ich traue dem Compiler diese "unintelligenz" auch nicht zu. Wir sind hier doch nicht bei php :shock: :zwinker:

greetz
Mike

CK_CK 25. Aug 2006 12:01

Re: C# ist komisch
 
Ja, hast recht, ich meinte Char... :stupid:

Boombuler 25. Aug 2006 12:19

Re: C# ist komisch
 
Zitat:

Zitat von JasonDX
Zitat:

Zitat von Boombuler
Hi

ich hab gerad mal was sonderlich cooles entdeckt!
Bin gerad dabei Code von Delphi auf C# zu portieren dabei ist mir ein kleiner Fehler unterlaufen...

Code:
{
    string var1 = "2004";
    string var2 = "2006";
    string var3 = var1 + '-' + var2;
    label1.Text = var3;
}
Ok ich hätte dran denken sollen, das man Strings in C# mit " einleitet und nicht mit ' aber was denkt ihr was bei mir nachher im Label1 stand???

Antwort: 4055

Die Lösung ist: 2004 + 2006 + Ord('-')

Kann ich nicht nachvollziehn :gruebel:
Bei mir steht da ganz normal "2004-2006" im Label, so wie es sein sollte.

Das war nur ein Beispiel Code... var3 war im orginal Code ein Element eines Objekt-Arrays und wie gesagt das ich das mit ' gemacht hab war nur ein Copy-Paste Fehler von mir weil es im Orginal Delphi Code war!

Greetz
Boombuler

Edit: bei .NET 2.0 ist das Problem gefixt, es trat nur auf .NET 1.1 auf!
Edit2: Seltsam bei einem leeren Beispiel Projekt tritt der Fehler nicht auf!

Elvis 25. Aug 2006 13:30

Re: C# ist komisch
 
Zitat:

Zitat von Boombuler
Das war nur ein Beispiel Code... var3 war im orginal Code ein Element eines Objekt-Arrays

Waren nicht zufällig Int32-referenzen in dem Array, die du auch auf Int32 geprügelt hast? :mrgreen:
Zitat:

Edit: bei .NET 2.0 ist das Problem gefixt, es trat nur auf .NET 1.1 auf!
Edit2: Seltsam bei einem leeren Beispiel Projekt tritt der Fehler nicht auf!
Nope, solch ein Blödsinn ist schlecht möglich, außer der *Compiler*[1] emitiert sowas hier:
Code:
string var2 = (2004 + ((Int32)'-') + 2006).ToString();
Und in dem Moment, in dem sich C# so benehmen würde würde sich Herr Hejlsberg aus purer Scham erschießen.
Sowas mag für Skriptsprachen wie dieser MS Basic dialekt oder PHP OK sein, aber nicht für eine Programmiersprache. ;)

[1]Die CLR würde solchen Blödsinn jedenfalls garantiert nicht ermöglichen....

MaBuSE 25. Aug 2006 14:20

Re: C# ist komisch
 
Zitat:

Zitat von Boombuler
ich hab gerad mal was sonderlich cooles entdeckt!
Bin gerad dabei Code von Delphi auf C# zu portieren dabei ist mir ein kleiner Fehler unterlaufen...
Code:
{
    string var1 = "2004";
    string var2 = "2006";
    string var3 = var1 + '-' + var2;
    label1.Text = var3;
}

Sollten Strings nicht mit einem StringBuilder zusammengesetzt werden, dabei dem + Operator jedesmal neue Objekte im Speicher generiert werden?

Der StringBuilder fängt auch nicht an zu rechnen ;-)

Dax 25. Aug 2006 14:39

Re: C# ist komisch
 
MaBuSE: Ich hab einen interessanten Link zum Thema '+' vs. StringBuilder ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz