Laden...
A
Andreas Adler myCSharp.de - Member
Softwareentwickler Dabei seit 18.12.2012 29 Beiträge
Benutzerbeschreibung

Forenbeiträge von Andreas Adler Ingesamt 29 Beiträge

19.06.2020 - 11:59 Uhr

Verstehe ich das richtig, dass Code-Block "A" bzw. "B" in den Methoden 1 und 2 identisch vorhanden ist, allerdings eben dupliziert, was du vermeiden willst?
Ein bisschen viel Spekulation. Das entnehme ich dem Eingangsbeitrag so nicht.

Das habe ich aus folgender Aussage geschlossen:

Die Codeblöcke sind bis auf die Parametertypen identisch.

Da ja hier die Parametertypen angesprochen werden, und die sich nur zwischen den Methoden 1 und 2 bzw. 3 und 4 unterscheiden, habe ich das entsprechend so geschlussfolgert.

Aber ja, es ist Spekulation. Der Eingangsbeitrag ist recht diffus.

18.06.2020 - 16:20 Uhr

Ich bin mir nicht ganz sicher, ob ich richtig verstanden habe, was dein Problem ist.

Hab ich das folgendermaßen richtig verstanden?:*Methode1: Enthält Code-Block "A", dann einen Aufruf auf Methode3 und dann Code-Block "B" *Methode2: Enthält Code-Block "A", dann einen Aufruf auf Methode4 und dann Code-Block "B" *Methode3: Enthält spezifischen Code für die identischen Parameter, wie sie Methode1 erhält *Methode4: Enthält spezifischen Code für die identischen Parameter, wie sie Methode2 erhält

Verstehe ich das richtig, dass Code-Block "A" bzw. "B" in den Methoden 1 und 2 identisch vorhanden ist, allerdings eben dupliziert, was du vermeiden willst?
Wenn dem so ist, und die beiden Code-Blöcke machen nichts mit deinen Übergabeparametern, dann solltest du die beiden Code-Blöcke in zwei weitere Methoden auslagern und diese entsprechend in den Methoden 1 und 2 aufrufen. Etwa folgendermaßen:*Methode 1: Aufruf auf MethodeA, dann einen Aufruf auf Methode3 und dann Aufruf auf MethodeB *Methode 2: Aufruf auf MethodeA, dann einen Aufruf auf Methode4 und dann Aufruf auf MethodeB

Sollten die beiden Code-Blöcke allerdings mit den Eingabeparametern arbeiten und diese (geringfügig) anders auswerten, solltest du über jeweils eine einzelne generische Implementierung für deine beiden Methoden Methode1 und Methode2 bzw. Methode3 und Methode4 nachdenken.

16.06.2020 - 09:59 Uhr

Die Kritik an master/slave gibt es schon Jahre - jetzt gibt es halt Handlungen.

Die Tatsache, dass gerade jetzt medienwirksame Taten folgen, ist für mich ein Hinweis darauf, dass es sich letztlich nur um Marketingmaßnahmender entsprechenden dahinterliegenden Firmen handelt.

Genau so wie alle möglichen Firmen den (medialen) Höhepunkt der Corona-Pandemie dazu genutzt haben, durch entsprechende Give-aways (Software XYZ kostenlos für x Monate) Werbung zu machen.

Wem es wirklich um die Sache geht, der macht es einfach still und leise im Hintergrund. So wie wir ja schon festgestellt haben, dass in vielen Bereich als problematisch geltende Begriffe längst ersetzt wurden.

Mit Softwareentwicklung oder Verbesserung der Welt hat das meiner Meinung nach nichts mehr zu tun.

Vor allem sehe ich die Gefahr, dass es durch diese neue Dynamik kein Ende mehr geben wird. Ein Begriff wird dem nächsten zum Opfer fallen, am Ende haben wir Ausdrucksstärke unserer Sprache verloren.

15.06.2020 - 13:38 Uhr

aber ich denke wenn man damit etwas Gutes tun kann, sollte man mitmachen.

Genau das darf bezweifelt werden; aber das wäre dann schon eine politische Diskussion, die wir hier wohl besser wirklich meiden sollten.

Persönlich habe ich master nicht mit der Unterdrückung in Verbindung gebracht;

Eben. Und so geht es schätzungsweise 99,9% der Entwickler. Die Welt wird durch einen umbenannten Master-Branch auch nicht besser. Aber soll jeder machen, was er für richtig hält. Was zählt, ist wohl nur das gute Gefühl, zu den Guten zu gehören ...

18.11.2015 - 10:18 Uhr

Oder, falls du in der Branche arbeitest, abonniere es über den Arbeitgeber 😃

Wir haben hier auch ein Abo und dann wandert die Ausgabe von Tisch zu Tisch. So hat jeder was davon.

Machen wir bei uns auch so. Und über die dotnetpro-Website gibt es nach Anmeldung die einzelnen Artikel inkl. Quellcode zum Download. 😃

28.10.2015 - 14:35 Uhr

@Coffeebean:

Ironischerweise gibt es im MSDN-Artikel Codekonventionen für C# (C#-Programmierhandbuch) selbst ein Codebeispiel, bei dem die Scope-Klammern eines if-Ausdrucks fehlen:

foreach (var ch in laugh)  
{  
    if (ch == 'h')  
        Console.Write("H");  
    else  
        Console.Write(ch);  
}  
Console.WriteLine();  
28.08.2015 - 17:55 Uhr

Hallo Eizo,

danke für dein Feedback.

Kurze Erklärung zu deinen Einwänden: Zum einen habe ich die beiden anderen Code-Tag-Icons neugestaltet, weil ich für das C#-Icon das darunterliegende Dokument-Icon um einen Pixel verbreitern musste, damit der Schriftzug komplett reinpasst. Deshalb die Neugestaltung der anderen beiden Icons, um das einheitlich zu haben.

Zum anderen finde ich die jetztigen Icons nicht sehr aussagekräftig. Das X-Symbol steht für XML/XAML, klar. Aber der Code-Tag steht auch z.B. für HTML. Ich mache vor solchen Icon-Gestaltungen immer eine kurze Google-Bilder-Recherche, konkret habe ich nach "icon xml" gesucht. Da sieht man, dass andere Icon-Designer überwiegend auf das Sprachmerkmal der spitzen Klammern (meist in Kombination mit einem Schrägstrich) greifen, um XML symbolhaft darzustellen. Das ganze passt dann auch für HTML bzw. generell für SGML-Sprachen.
Und das Icon für allgemeinen Code ist meiner Meinung nach sogar etwas irreführend (was wohl den meisten aufgrund von Gewöhnung nicht auffällt). Die verschiedenen Textzeilen, wie sie in dieser Form in der Regel für Texteinrückung verwendet werden. Eine Bildersuche nach "icon code" brachte dann auch hervor, dass hierfür oftmals die geschweiften Klammern verwendet werden, die ja in vielen Programmiersprachen Teil der Syntax sind.

Natürlich steht es den myCSharp-Admins frei, die Icons nur vereinzelt (oder gar nicht) zu verwenden. Ich hoffe mit meiner Erklärung versteht man man Anliegen für die komplette Neugestaltung. 😃

Gruß,
Andreas

27.08.2015 - 19:14 Uhr

Hier eine Vorschau (C#, XML, allgemeiner Code).

27.08.2015 - 19:13 Uhr

Ich hab mal die drei Code-Tag-Icons neu gestaltet, weil ich auch finde, dass die jetzigen nicht sehr aussagekräftig sind ...

14.08.2015 - 00:13 Uhr

Interessant dürfte in diesem Zusammenhang auch das Let's Encrypt-Projekt sein, ist leider (noch) nicht verfügbar.

31.07.2015 - 13:01 Uhr

Danke für die Korrektur. Hatte in Erinnerung, dass Microsoft durchgängig MIT verwendet hat, ist aber bei ASP.NET nicht der Fall, beim Core-Framework und der Core-CLR aber schon.

31.07.2015 - 10:40 Uhr

Zur Frage, ob man sich mit der Wahl von ASP.NET MVC nicht zu sehr an Microsoft kettet sollte man zumindest noch erwähnen, dass sich Microsoft mit ASP.NET 5 und .NET Core 5 stark in Richtung Open Source und Plattformunabhängigkeit bewegt hat.

Man wäre also in Zukunft bei ASP.NET nicht mehr an Microsoft-Server gebunden und mit der Wahl der sehr freien MIT-Lizenz ist auch eine gute Basis für die Weiterentwicklung durch die Community gegeben, selbst wenn Microsoft aus der Entwicklung "aussteigen" sollte (was ich Stand heute für sehr unwahrscheinlich halte).

Die Quellen sind auf GitHub zu finden.

Hier mal ein grober Überblick:
.NET Core is Open Source
Announcing .NET 2015 - .NET as Open Source, .NET on Mac and Linux, and Visual Studio Community

14.07.2015 - 15:36 Uhr

Halte ich persönlich eher für unkritisch - ich glaube kaum, dass jemand bei .CLI im Zusammenhang mit einer ausführbaren Datei an "Common Language Infrastructure" denkt. Erst recht nicht, wenn es auf gleicher Ebene ebenfalls eine ausführbare Datei mit der Endung .GUI gibt.

Wie auch immer, ist natürlich deine Entscheidung bzw. eures Teams. 😃

14.07.2015 - 14:50 Uhr

Alternative ginge auch CLI - für Command-Line Interface.

24.06.2015 - 17:15 Uhr

Dein Problem war jetzt zwar nicht im regulären Ausdruck begründet, aber trotzdem würde ich dir raten, anstelle von [A-ZäÄöÖüÜ] die Zeichenklasse \w (=Word Character) zu verwenden. Das ganze funktioniert dann nicht nur mit deutschen Umlauten sondern auch mit anderen Sonderzeichen; auch Sprachen mit nicht-lateinischem Alphabet, z.B. Hebräisch, Russisch, Arabisch, werden damit gematcht.

08.05.2015 - 17:36 Uhr

Goto ist böse. 😉

Nein, ist es nicht. Für goto gibt es durchaus berechtigte Anwendungsfälle.

28.04.2015 - 12:24 Uhr

Ausnahmen bestätigen natürlich die Regel, aber wie Abt und Coffeebean schon sagten, sollte man das devinitiv vermeiden.

Variablennamen sind ja Informationsträger (Semantik) und tragen damit erheblich zur Lesbar- und Verständlichkeit des Programmcodes bei. Was also syntaktisch korrekt ist, kann semantisch völlig verkehrt sein. Z.B.: int @string = 1; - eine Variable mit dem Namen string, der Typ ist aber int.

Im Zusammenhang mit der Vorlesung des Profs wäre vermutlich die Variablenbezeichnung sampleString sinnvoller (sofern die Logik des Programmcodes nicht einen noch treffenderen Namen hergibt, wie etwa string name = "...";, wenn man einen Namen speichert).

Jeder Entwickler sollte jegliche Identifier, seien es Variablen-, Klassen- oder Methodennamen immer bedacht und sinnvoll vergeben. Das hilft nicht nur einem selbst, indem man sich klar wird, was genau gemacht werden soll, sondern hilft auch anderen Entwicklern beim Lesen und Verstehen von fremdem Code.

21.04.2015 - 15:12 Uhr

Zum Thema PDF-Erstellung: List & Label wurde ja schon genannt. Der Nachteil ist hier aber, dass diese Komponente nicht gerade günstig ist, was gerade für ein solches Anfänger-/Übrungsprojekt nicht unbedingt geeignet ist. Ich würde da eher zu MigraDoc & PDFsharp raten. Mit MigraDoc kann man mit einem Dokumenten-API PDF-Dateien erstellen (es gibt sogar ein Beispiel für Rechnungen). Mit PDFsharp kann man dann auf Low-Level-Ebene mit PDF-Dokumenten arbeiten (auch kombinierbar).

21.01.2015 - 16:37 Uhr

Bitte korrigier Deinen Text oben auch oder verweise auf die Enterprise License Seite, wo das stehen soll.

Ich denke der Text von Kingside ist schon korrekt so und entspricht auch dem, wie Syncfusion es selbst kommuniziert.

Wichtiger Unterschied: Die "Enterprise Edition" wird im Rahmen der "Community Licence" kostenlos lizenziert. Die "Enterprice Licence" selbst wird natürlich nicht kostenlos abgegeben. Aber der Produktumfang ist der selbe, eben die besagte Enterprise Edition, mit der Einschränkung, dass man die Community Licence nur als Einzelentwickler oder in Unternehmen mit bis zu 5 Entwicklern und einem maximalen Bruttoumsatz von 1 Mio. USD einsetzen darf.
Damit entspricht das so ziemlich der Visual Studio Community Edition, die ja der VS Professional-Edition entspricht.

15.12.2014 - 11:19 Uhr

Die String-Interpolation habe ich bisher auch als Compiler-Feature verstanden. Finde die Funktion auch ganz nett.

Allerdings sehe ich kaum Vorteile im Vergleich zu SmartFormat.NET, da auch noch einige weitere Features hat.
Klar, man hat eine Prüfung des Format-Strings schon bei der Kompilierung und je nach dem wie es intern umgesetzt wird eventuell eine bessere Performance (string.Format ist ja etwas langsamer als normale String-Verkettung mit dem + Operator. Aber ob das dann am Ende so viel ausmachen wird...?

Das Argument für die Exception-Filters hab ich auch nicht nachvollziehen können. Wie herbivore ja schon gesagt hat, bleibt der StackTrace bei einem einfachen throw ja auch erhalten.

Der Null-condition Operator war meiner Meinung nach auch schon lange überfällig. Sehr nützlich!

Ansonsten war ja auch ein Ziel der neuen C#- und VB.NET-Version, die beiden Sprachen näher aneinanderzurücken. Das using-static-Feature beispielsweise gab es in VB.NET von Anfang an (damals wohl aus der Motivation heraus, VB6-Umsteigern entgegenzukommen).
Sei's drum, nützlich kann dieses Feature trotzdem sein.

16.03.2014 - 13:36 Uhr

Hallo,

danke für die Antworten und den Hinweis auf die anderen Parser.

Ja du hast Recht, ich arbeite mit Geldwerten; über eine Umstellung von double auf decimal hatte ich auch schon nachgedacht; ich glaub ich hatte es sogar schon einmal versucht, bin aber an irgendeinem Punkt gescheitert... Aber ich kann das ja nochmal versuchen.

Eine andere Idee von mir war, die Beträge vor dem Vergleich auf die nötige Genauigkeit zu runden, also zwei Stellen. Dazu müsste man die round-Methode noch leicht anpassen (was kein Problem ist), sodass sie zwei Parameter entgegennimmt, einmal den Betrag und einmal die Anzahl der Dezimalstellen.

Ich werde mal schauen, ich denke die Umstellung auf decimal wäre generell in meinem Anwendungsfall von Vorteil. Das werde ich als nächstes versuchen.

Danke!

P.S.: Glückwunsch zu 2000 Beiträgen! Aber ich glaube von einer Forumssucht kann man bei einem Beitrag pro Tag noch nicht sprechen. 😉

14.03.2014 - 16:54 Uhr

Hallo Th69,

das Projekt Excel-Parser habe ich erstmal auf Eis gelegt, da es letztlich nur "nice to have" und kein "must have" war.
Dafür benutze ich deinen FormulaParser sowie den ConditionalParser und alles in allem leistet dein Parser super Arbeit. 👍

Mir sind jetzt aber zwei Probleme aufgefallen, vielleicht könntest du (oder gerne auch jemand anderes) ein wenig Licht auf die Sache werfen.

Ich verwende den ConditionalParser<double, FormulaParser>.
Nehmen wir einmal folgende Formel an: ((1) + (-1)) == 0; hier erhalte ich die Fehlermeldung "Missing bracket: )". Aber eigentlich fehlt ja keine Klammer. Auf die Klammern um die Zahlen herum könnte man zwar verzichten (dann funktioniert die Auswertung der Formel auch), aber dennoch sollte das ja kein Problem darstellen, oder?

Das ist jetzt kein dramatisches Problem, man kann es ja leicht umgehen. Ich wollte es trotzdem erwähnen, weil es sich für mich wie ein Bug darstellt.
Das eigentlich gewichtigere Problem das ich habe ist der Vergleich von double-Werten, wobei die double-Ungenauigkeit ein falsches Ergebnis liefert.

Z.B. habe ich folgende Formel: (5819.03 - 2666 - 3153.03) == 0; der linke Vergleichswert ergibt eigentlich den Wert 0; dadurch müsste die Prüfung auf Gleichheit mit dem rechten Wert true zurückgeben. Tatsächlich liefert in diesem Fall dein Parser das Ergebnis false; was sehr ärgerlich ist, weil das Ergebnis nicht richtig ist (und somit meine Anwendung "falsch" funktioniert).

Ich hab mir die Equal-Methode im Conditional-Parser angeschaut; bei der o.a. Formel kommt für x der Wert -0.00000000000045474735088646412 und für y der Wert 0.0. Die Überprüfung x.Equals(y) ist dementsprechend aus Sicht des Computers richtig.
Ich hab hier auch testweise (im Debugger) die Überprüfung unter Berücksichtigung der Ungenauigkeit durchgeführt, die du und pdelvo in den vorherigen Beiträgen erwähnt habt, mit Epsilon = 1e-15; aber auch hier ist das Ergebnis noch false.

Gibt es für dieses Problem eine einfache und korrekte Lösung?

Danke und Gruß,
Andreas

10.01.2014 - 15:01 Uhr

vor allem aufgrund der spezifischen Themen von vllt 1-2 Stück im Monat - keinen eigenen Bereich geben.

Man sollte hier aber vielleicht auch Ursache und Wirkung prüfen: Gibt es vielleicht deswegen nicht so viele spezifische WinRT-/Modern-App-Fragen, weil es eben keinen speziellen Bereich dafür gibt?
Campl3r hat ja schon angedeutet, dass potentielle Fragensteller sich möglicherweise einfach ein anderes Forum suchen, weil sie hier eben keinen eigenen Bereich dafür finden.

19.12.2013 - 11:33 Uhr

Ich hab nach meiner FIAE-Ausbildung mit 2250 € Brutto angefangen (Rheinland-Pfalz). Andere aus meiner Berufsschulklasse haben ein Einstiegsgehalt von 2500 € bekommen. Jemand anderes hatte durch einen Firmenwechsel ein Einstiegsgehalt von 3000 € Brutto ausgehandelt (könnte aber auch Baden-Württemberg statt Rheinland-Pfalz gewesen sein, da nah an der Grenze).

Einfach nur um mal ein paar Zahlen in den Raum zu werfen...

23.07.2013 - 19:57 Uhr

Hallo Th69,

danke für die Hinweise. Ich werde mal schauen, ob ich damit einen geeigneten Excel-Parser implementieren kann.

Gruß,
Andreas

20.07.2013 - 17:33 Uhr

Hallo pdelvo, hallo Th69,

danke für die Hinweisse. Gut zu wissen, dass man eigene Funktionen so leicht hinzufügen kann.

Leider klappt das im Falle der gewünschten If-Funktion nicht. Diese soll nämlich beliebige logische Ausdrücke auswerten können, nicht nur Gleichheit. Und auch die Syntax muss so bleiben wie im Beispiel.
Grund: die erwähnte Reporting-Lösung hat mittlerweile eine Excel-Ausgabe, in der die Werte allerdings nicht statisch drinstehen, sondern aus einer Tabelle gelesen werden, die wiederrum mit der Datenbank verknüpft ist. In einigen Zellen wird der Wert aus der Tabelle ermittelt (Kontenwert), in anderen Zellen stehen Formeln, die auf Basis der Kontenwerte Summen bilden und Prozentberechnungen durchführen.
Neben der Excel-Ausgabe gibt es aber auch statische Ausgaben (direkt im Programm oder z.B. als HTML-Bericht). In diesen Berichten werden die enthaltenen Formeln entsprechend berechnet. Beide Ausgabemodule haben aber eine gemeinsame Basis, daher müssen die Formeln mit Excel kompatibel sein (wir wollen einen eingeschränkten Umfang der Excel-Funktionen zur Verfügung stellen).
Jetzt kann der Anwender in manchen Bereichen eigene Formeln definieren, und da sollte er eben so ähnlich arbeiten können wie mit Excel (bis auf die Funktionsnamen, die in Excel lokalisiert sind, sollte es gleich sein).

Was ich also bräuchte wäre eine Mischung aus dem ConditionalParser und dem FunctionParser. Liegt das im Bereich des Möglichen mit dem MathParser?
Ich hatte auch eine Bibliothek gefunden, die mir Excel-Ausdrücke auswerten kann, aber bei einem Performance-Vergleich mit dem Mathparser (bei einfachsten Funktionen: Addition, Substraktion, Multiplikation und Division von zwei Zahlen) lagen Welten zwischen beiden Komponenten, deswegen ist letztere keine wirkliche Option für uns.

Gruß,
Andreas

19.07.2013 - 16:49 Uhr

Hallo Th69,

vielen Dank für diesen super Formel-Parser. Vor allem die Performance ist genial!

Ich verwende den Parser in einer Reporting-Lösung, in der bisher nur die Grundrechenarten verwendet werden. Allerdings haben wir jetzt die Anforderung, auch komplexere Formeln auszuwerten, die auch Funktionen unterstützen sollen.

Also zum Beispiel: "If(Bruttoumsatz = 0, 0, Nettoumsatz / Bruttoumsatz)", wobei die beiden Variablen Bruttoumsatz und Nettoumsatz vor der Formelauswertung durch den konkreten Wert ersetzt werden, tatsächlich wäre die auszuwertende Formel also z.B. "If(100 = 0, 0, 75 / 100)".

Meine Frage wäre jetzt also, ob sich dein Formel-Parser mit relativ wenig Aufwand so anpassen ließe, dass er eben auch Funktionen und Vergleichsoperation (größer, gleich, ungleich usw.) unterstützt oder würdest du sagen, dass das dein Formel-Parser einen ganz anderen Ansatz verfolgt und sich das nicht so leicht als Add-On realisieren lässt?

Wäre schön, wenn du dazu kurz deine Einschätzung schreiben könntest.
Falls es gehen würde, könntest du mir einen Anhaltspunkt geben, wo ich eingreifen müsste?

Vielen Dank schon mal vorab! 😃

04.06.2013 - 16:24 Uhr

@Patrickssj6:
Ironischerweise beweist du die Richtigkeit dieser Aussage indem du zumindest deine eigene Faulheit bloßstellst.

Denn erstens besteht dein Beitrag aufgrund deiner Faulheit, nur aus einem Zitat, was aber keine Eigenleistung darstellt und zweitens zeigst du, dass du zu faul warst, alle Beiträge in diesem Thema zu lesen, ansonsten hättest du gesehen, dass bereits herbivore dieses Zitat angeführt hat.

25.02.2013 - 10:55 Uhr

Das kann man in der Dokumentgliederung (Ansicht -> Weitere Fenster -> Dokumentgliederung) per Drag&Drop erledigen (siehe Screenshot).