Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von panicJonny
Thema: API zu einer Klasse, Grundschwatzfrage
Am im Forum: Grundlagen von C#

Mein Klasse kann schon ein wenig mehr.

Sie kann auch Enums(Flags), Point(f), Size(f) und so weiter konvertieren. Den Vorteil habe ich oben schon beschrieben, dass ich mit Reflection den Zieldatentyp "auslesen" kann und dann entsprechend Konvertieren.

Grüße,

Thema: API zu einer Klasse, Grundschwatzfrage
Am im Forum: Grundlagen von C#

Klar kann ich die verwenden und mache ich auch im Hintergrund. Meine Klasse macht das ganze ein wenig praktischer, da ich ein einheitliches Interface habe.

Was ich nicht geschrieben habe ist, dass man den Typen auch als Parameter übergeben kann und nicht unbedingt als generic type parameter angeben muss.

Es gibt also auch eine StringConverter.ConvertTo(type,string). Das ist auch der ursprüngliche Grund für die Klasse, da ich damit über Reflection Datenklassen aus Dateien heraus befüllen kann. Vornehmlich gehts dabei um Grenzwerte die in Konfigdateien stehen.

Da ich dann die Klasse nun mal schon hatte, habe ich sie ein wenig erweitert und nutze sie nun als allgemeine Konverterklasse.

Thema: API zu einer Klasse, Grundschwatzfrage
Am im Forum: Grundlagen von C#

Hallo zusammen,

ich habe mir eine Klasse gebaut, mit der ich strings in so ziemlich jeden Datentyp umwandeln kann, den ich möchte.
So weit so gut.

Die Hauptmethode wird so aufgerufen. StringConverter.ConvertTo<T>(string).

Jetzt ist mir beim Benutzen aufgefallen, dass der Aufruf relativ schwer zu lesen ist. Gerade weil ich den halt oft hintereinander benutze. Also in mehreren Zeilen, wenn ich mal wieder einen String zerlege und die Bestandteile in die entsprechenen Properties packe.

Da hab ich mir gedacht, ich mache für häufige Datentype spezielle Methoden.

Zum Beispiel StringConverter.ToInt(string).

Wäre das eigentlich zu viel des Guten und fallen euch andere Lösungen ein?

Viele Grüße.

Thema: Drucken an exakter Position auf Formularvordruck Din A6
Am im Forum: GUI: Windows-Forms

Moin moin,

für die Grobeinteilung kannst du ausmessen und zusammen mit der dpi vom Drucker die Koordinaten ausrechnen.

Für die genaue Einstellung hilft trial & error.

Thema: Wie baut ihr einen Installer? Erfahrungen?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Moin moin,

ich mache mir das Einfach. So lange es nicht unbedingt sein muss, liefere ich meine Anwendungen als "portable" aus. Das ist natürlich sehr bequem und einfach. (einfach das release Verzeichnis ;)

Wenn ich noch zusätzliche Sachen installieren muss, dann nehme ich NSIS her. Das ist ganz nett und bietet viele Möglichkeiten.

Thema: Installation von VS 2017/2019 nicht möglich
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Mach mal deinen Virenscanner aus. Der hatte bei mir die Dateien genau dann zum scannen blockiert, als der Installer sie gebraucht hat.

Thema: Wie kann ich eine Klasse als Methoden-Parameter in Methode übergeben?
Am im Forum: Grundlagen von C#

Ich hab mir aus "Verzweiflung" noch mal deine erste Antwort langsam durchgelesen und bin auf diesen Satz gestoßen.

Zitat von Abt
Das "besser" war aus dem Auge als Software Architekt.

Du kannst eben auf ein Generic Einschränkungen setzen, die eben bei einfacher Parametrisierung nicht möglich sind.


Dein Aufruf startet quasi mit einer Whitelist und schränkt diese dann nachträglich ein (bildlich gesprochen).

Das Interface als Parameter anzugeben schränkt hingegen gleich maximal ein. Was ja an der Stelle für mich Sinnvoll zu sein scheint.

Das enzige, was mir an der Stelle dazu einfällt ist Erweiterbarkeit, falls ich mal ein weiteres Interface supporten soll. Allerdings soll man ja seine Software auch nicht auf absolut jeden möglichen Fall auslegen (overengineering).

Thema: Wie kann ich eine Klasse als Methoden-Parameter in Methode übergeben?
Am im Forum: Grundlagen von C#

Sorry, kantische Lehrmethoden funktionieren bei mir heute nicht.

Was ist der Benefit davon, dass ich den Aufruf über ein Generic mache? Und bitte nicht wieder auf den Artikel mit den contstaints verweisen. Der hat mit meiner Frage irgend wie nichts zu tun.

Grüße

Thema: Wie kann ich eine Klasse als Methoden-Parameter in Methode übergeben?
Am im Forum: Grundlagen von C#

hm,

die brauche ich aber auch nicht, wenn ich den Parameter vom Typ IIrgendwas mache.

Welchen Vorteil bekomme ich davon statt


void foo(IIrgendwas param)

void foo<T>(T param) where t: class, IIrgendwas

zu machen?

Das ist, für mich gesehen, der gleiche Aufruf nur komplizierter

Thema: Wie kann ich eine Klasse als Methoden-Parameter in Methode übergeben?
Am im Forum: Grundlagen von C#

Huhu, das ist keine ketzerische Frage sondern ernst gemeint. Warum das als generic übergeben?

Thema: Warum verlangt Rekursion Übergabe der Parameter mit ref?
Am im Forum: Grundlagen von C#

Hallo,

bitte die Code tags benutzen. Das macht die Sache deutlich lesbarer.

Zu deiner Frage. Schmeiß das ref aus der Methode raus. Das hat dort nix zu suchen. Du willst ja eine Kopie der Zahl übergeben und keine Referenz drauf.



int fac(int x){
   return x<2 ? 1: x * fac(x-1)
}

Thema: Macht es Sinn ein Factory Design Pattern zu implementieren, obwohl man nur eine konkrete Klasse hat?
Am im Forum: Grundlagen von C#

Zitat von Abt
Der Sinn von Interfaces ist primär die Modularisierung und die Trennung von Schnittstelle und Implementierung.
Der Nutzer einer Schnittstelle soll nichts von der konkreten Implementierung wissen.

Ist das nicht ein Relit aus alten C Zeiten? Sogar modernes C++ geht davon weg (siehe modules). Und nur weil es kein IFoo gibt hat Bar nicht gleich kein definiertes Interface nach außen. Selbst das .NET Framework packt nicht alles in Interfaces ( z.Bsp.: File, Exception, EventArgs )

Zitat von Abt
Quatsch. Bitte so nicht machen!
Interfaces sind keine unnötigen Strukturen!

Das widerspricht aber schön dem KISS prinzip. Für eine Klasse, von der es keine weitere Variante gibt brauche ich kein extra Interface und auch keinen Factory. Der Code lässt sich aber trozdem leicht erweitern, falls es doch mal nötig wird, weil sich eine Interface Struktur ( ich weiß grad nicht, wie ich ein Interface als solches selber von dem Interface, wie in IDisposable, sprachlich unterscheiden soll) sehr leicht drüber stülpen lässt.

Wenn ich jeden Code immer so anlegen würde, bekäme ich jedes mal ganz schnell einen unübersichtlichen Moloch durch den sich man ziemlich schlecht navigieren kann. Ein Interface zwischegeschaltet sorgt leider auch dafür, dass sich die Implementierung zum teil nicht so leicht finden lässt.


PS: Mir fällt gerade auf, dass es OT ist und vor allem deine absoluten Aussagen betrifft. für den TO ist es unerheblich. Seine Klasse gehört in ein Interface und ein Factory.

Thema: Wie kann ich Bibliotheken sinnvoll Verwalten?
Am im Forum: Rund um die Programmierung

@Abt

Der Link hat schon mal ziemlich weiter geholfen. Ich sag nur Filterblase. Ich hab imm er nur Anleitungen gefunden, wie man den Käse halb Hand erstellt. Ich wusste zum Beispiel gar nicht, dass ich nuget spec auch auf das Projektfile loslassen kann. Ich hab das immer auf die dll selber gemacht.

Bei deinem Link muss ich nur das nuspec einmal von Hand erzeugen und den Rest kann ich mit ein wenig Post-Build events machen. Auf jeden Fall eine deutliche Erleichterung zum bisherigen Vorgehen.

@codesoldier

Wenn ich anfange einen eigenen GitLab Server in einer VM aufzusetzen bekomme ich tüchtig Haue von unserer IT (und das Zurecht). Manche Sachen muss man einfach nehmen, wie sie sind.

Thema: Wie kann ich Bibliotheken sinnvoll Verwalten?
Am im Forum: Rund um die Programmierung

Zitat von Abt
Nö.
Gut, ich spezifiziere es mal genauer. vom VS Studio das NuGet Package erstellen lassen geht nur bei .Net Core Anwendungen. Falls ich falsch liege, dann bitte her mit der Anleitung, ich finde nämlich nichts.
Zitat von Abt
dann ist die Software Architektur Käse.

Ich gebe ja gerne zu, dass ich was falsch mache. Kompiliere ich meine Biblioteken als .Net Core, kommen alle benutzen Referenzen von .Net Core mit ins Ausgabeverzeichnis.
Zitat von Abt
man muss nichts per Hand ändern - noch nie.
Egal ob .NET Framework, .NET Core oder .NET Standard.
Die Version wird im .nuspec beim compilieren automatisch angepasst? Bei mir leider nicht.
Zitat von Abt
totale Käse, von Vorn bis hinten.

Meine Rede

Ich bin leider an SVN und VS ohne TFS gebunden und das lässt sich auch nicht ändern.

Thema: Wie kann ich Bibliotheken sinnvoll Verwalten?
Am im Forum: Rund um die Programmierung

Wie mein Workflow mit Nuget ist, hab ich ja hin geschrieben.


Git ist nicht und TFS auch nicht.

Thema: Wie kann ich Bibliotheken sinnvoll Verwalten?
Am im Forum: Rund um die Programmierung

Hallo zusammen,

bei meiner Arbeit, fallen viele kleinere Projekte an, die in Teilen gemeinsamen Code haben. Da hat sich im Laufe der Zeit einiges angesammelt.

hier mal eine logging Klasse, da mal ein paar Klassen zum ansteuern von managed Switches u.s.w

Das ist mittlerweile eine schöne Ansammlung von code geworden. Nur langsam wirds ein wenig unübersichtlich. Ich weiß nicht mehr wo was in welcher Version aktuell ist.

Ich habe da ein paar Sachen ausprobiert:

-> bauen von Nuget Packages: da finde ich den Workflow ziemlich doof bei bugfixes und Erweiterungen. Packages automatisch erstellen lassen geht ja nur bei .Net Core anwendungen und das erzeugt bei mir immer einen Wust an dlls. Von Hand ist das ziemlich mühsam. nuspec Datei ändern, binary umkopieren, nuget package erzeugen und dann ins Repository Verzeichnis kopieren und dann im Zielprojekt updaten.

Vorteil ist, dass Unittests in einem eigenem Projekt leichter möglich sind (wenn machbar)

-> als SVN external einbinden: Eigentlich eine ziemlich runde Sache. Nur leider kann man gemeinsame Abhängigkeiten nicht gut auflösen. Man hat dann am Ende im Zielprojekt teilweise zig mal die gleichen Klassen

-> Sourcen kopieren: So mache ich das gerade. Nur leider verschwindet der Überblick, was denn jetzt die letze Version mit den letzten Bugfixes und den neuesten Features ist.

Wie macht ihr das. Hat da wer einen Tip für mich?
Zu bedenken ist, dass ich nicht der einzige bin, der diese Klassen benutzt, aber der einzige, der dran rumschraubt.

Grüße,

Thema: WinForms verschiedene Rechner verbinden im gleichen Netz
Am im Forum: Rund um die Programmierung

Moin,

sind alle Rechner in eine Domöne eingebunden? Vielleicht kann das hier weiter helfen.

Ich habs zugegebenermaßen nur überflogen und kann es nicht ausprobieren (mangels admin)

https://sid-500.com/2018/02/28/powershell-get-all-logged-on-users-per-computer-ou-domain-get-userlogon/

Einen Versuch ist es wert.

Thema: Zwei Listen "List<Typ>" zusammenführen?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Nur mal so aus der Hüfte geschossen^^.


ListA.AddRange(ListB) 
pappt beide Listen zusammen.


var combined = ListA.Distinct();


sucht dann die Einzigartigen raus, wobei du noch GetHashCode und Equals in deiner Bestellungen Klasse überladen musst.

Grüße

Thema: Fehlermeldung in Visual Studio bleibt auf Deutsch obwohl die Sprache auf Englisch umgestellt wurde
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo,

das einzige, was bei mir geholfen hat.

VS deinstallieren. Auf der Microsoft Webseite einloggen und dort die Sprache auf Englisch umstellen (in deinen Accounteinstellungen). Dann den Installer herunterladen und wieder installieren.

Ich hpffe aber, es gibt noch einen anderen Weg.

Thema: Delegate eines unbekannten Types erstellen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Moin,

ich gebe zu, ich habe keine Ahnung, was du meinst. Ich versuchs trozdem mal :)


Ein Event hat gewöhnlich immer die gleiche Signatur

void EventName(EventArgs e, object sender)

wobei EventArgs die Basisklasse ist und davon abgelitten wird.

Wenn du eins erstellen willst, kanns du dir das mit dem Delegaten auch sparen. Das geht mittlerweile einfacher.


public EventHandler<EventArgs> MyEvent = new EventHandler<EventArgs>();
private void RaiseMyEvent(EventArgs e){
    MyEvent?.Invoke(e,this);
}

Wenn du dann das Event feuern willst, rufst du einfach RaiseMyEvent an der Stelle auf, wo du es loswerden willst.


Grüße

Thema: Button-Variable zur Laufzeit mit String aus Methode deklarieren?
Am im Forum: GUI: Windows-Forms

Moin,

schmeiß doch einfach alle Buttons in ein Dictionary<string,Button>. Da kannst du mit den Namen auf sie zugreifen.

Thema: Vom Seriellen Port empfangene Daten in eine Textbox schreiben
Am im Forum: Grundlagen von C#

Zitat von Th69
@panicJonny:
Er parst jedesmal den Puffer:

ReceiveCommando = parser.ParseCommandoReceive( buffer );
Das führt aber im Endeffekt zum gleichen Ergebnis wie bei meiner Aussage oben.
Nein, tut er nicht. Wenn nicht genügend Daten ankommen, springt er vorher aus der Methode mit return raus.

Thema: Vom Seriellen Port empfangene Daten in eine Textbox schreiben
Am im Forum: Grundlagen von C#

Zitat von Janiiix3
Wo schmeiße ich denn den Inhalt weg?


  */
            byte[] buffer = new byte[ 50 ];

            /*  Empfangene Daten abholen
            */
            length += Client.Read(buffer, 0, buffer.Length);

            /*  Ist die mindest Anzahl an Bytes empfangen worden?
            */
            if ( length < (int)cmd.Answer_Byte_Position_enum.CMD_ANSWER_DATA_BYTE_BEGINN )
            {
                return;
            }

Du legst den Buffer in der Methode an. Beim Verlassen dieser, werden die Daten weggeschmissen. Du speicherst die nirgends.

Thema: Vom Seriellen Port empfangene Daten in eine Textbox schreiben
Am im Forum: Grundlagen von C#

Erstaunlich, dass das überhaupt funktioniert.

Du schmeißt nämlich so den Inhalt deines Buffers weg, wenn nicht genug daten eingetroffen sind.

Thema: Wie kann ich einen Rolling Log mit einer Textfile *.txt selber erstellen?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Moin,

du willst, dass dein Log von oben nach unten "wächst". Das halte ich erst mal für eine schlechte Idee. Das frist absolut unnötig performance, weil du ja immer die Datei neu schreiben musst und der Lohn dafür ist...überschaubar. Außerdem sollte man in einem Log nichts löschen. Dann kann man später nachschauen, was früher passiert ist.
(wie oft mich schon der ringbuffer vom syslog hat hängen lassen)


Falls du eine separate Darstellung von deinem Log hast, dann lasse lieber die anders herum anzeigen. Das sind nur Operationen im Ram statt auf der Platte.

Edit: ansonsten kannst du mit Skip oder Take arbeiten.


   int displayLines =3 ;
   var FileContent = new List<string>(File.ReadAllLines(fileName));
   var toDisplay = FileContent.Skip(FileContent.Count - displayLines ).ToList();            
   
   toDisplay.Reverse();
   bla.toDisplay (x => Console.WriteLine(x));

Kein Anspruch auf Vollständigkeit oder Funktion. Ist nur runter getippelt. Sollte aus einer Datei alle Daten einlesen und nur die letzten 3 anzeigen beginnend mit der letzten. In deinem Fall sollten die Daten natürlich aus dem Ram kommen und nicht aus der gerade geschriebenen Datei.

PS: 5 Edits--- neuer Rekord. Ich geh Kaffee holen.

Thema: Färben jeder 2. Column im DGV nach niedrigstem Wert
Am im Forum: GUI: Windows-Forms

Ihhh, deutsche Version installiert?

Ja, das ist der Leistungsprofiler. Und dann den Performance Wizard verwenden (keine Ahnung, wie der auf deutsch heißt).

Dann kannst du dein Programm starten und nach dem Beenden so ziemlich alles analysieren, was du brauchst. In deinem Fall werden wohl die Methodenaufrufe interssnt sein.

Entweder Fuchst du dich da durch oder schaust mal hier für eine kleine Einführung

Einführung in die Leistungsprofilerstellung

Hier noch mal ausführlich (englisch)
Profiling in Visual Studio

Thema: Färben jeder 2. Column im DGV nach niedrigstem Wert
Am im Forum: GUI: Windows-Forms

Moin,

zu erst mal... Code aufräumen. Das ist ja ein Graus.

Kleiner Tip, wenn du immer nur jede zweite Spalte haben möchtest in deiner for Schleife, kannst du den Schleifenzähler auch gleich um 2 erhöhen statt im Code das abzufragen.


   for (int cols = 6; cols < colCount; cols+=2)


Zu deinem Problem: Du benutzt warscheinlich das falsche Event. CellFormatting ist nicht wirklich dafür geeignet. Das ist nur für eine einzelne Zelle gedacht.

Wann willst du denn das aufrufen? Immer wenn ein neuer Preis eingegeben wird? Dann nimm lieber was wie CellEndEdit oder CellLeave

Nachtrag. Was für eine Version vom Visual Studio benutzt du denn? Bei der Community Edition vom VS2017 ist der Profiler mit an Board. Damit kannst du gut messen, wo es hängt.

Thema: HTML Datei auslesen ab einen gewissen Punkt
Am im Forum: Grundlagen von C#

Hiho,

lade doch mal aus dem NuGet Browser das HtmlAgilityPack. Ich habe es zwar noch nicht selbst benutzt, denke aber, dass es was für dich ist.

Grüße.

Hier gehts zu Webseite

Thema: Datei mit variablem Dateiennamen laden schlägt fehlt, Textbox bleibt leer
Am im Forum: Grundlagen von C#

Ob das der richtige Weg ist? Scheint mir ein fragwürdiger Ansatz zu sein.

Speichere deine save.txt lieber an einem Ort ab, der für die Benutzer unterschiedlich ist ist. Zum Bsp im %Appdata%. Dort gehören solche Sachen auch hin.

Thema: Wenn eine kopierte List<int> sortiert wird, wird auch die originale sortiert
Am im Forum: Grundlagen von C#

Moin

du kannst auch einfach LINQ benutzen. Dann schrumpft das ganze zu einem Einzeiler


  var count = kevin.where( x => x≥15 ).Count();