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 Palladin007
Thema: Wieso verwendet C# ein separates Typsystem mit Wertetypen?
Am im Forum: Grundlagen von C#

Ich weiß woher das kommt.
Daher ja überhaupt das Beispiel Java, weil man da schön sieht, wie es ist, komplett ohne Structs (naja, bis auf int und Co) zu arbeiten, während der Rest der Sprache viele Ähnlichkeiten zu C# hat.

Ich finde es aber auch irgendwo konsistent, Structs zu erlauben, wenn im Hintergrund sind die Compiler-Typen von Java auch nichts anderes, als bei C# (vermute ich zumindest), nur dass C# diese Funktionalität für die Entwickler zur Verfügung stellt.

Thema: Wieso verwendet C# ein separates Typsystem mit Wertetypen?
Am im Forum: Grundlagen von C#

Naja, angenommen, int wären Referenztypen, hätte sich die Arbeitsweise auch danach orientiert, dass man eben kein int so behandeln darf, wie Du es da getan hast.
In diesem fiktiven Szenario würden sich die Leute wahrscheinlich fragen, warum man das nicht als Referenztyp haben möchte ;)

Aber wenn man wissen will, wie es sich ohne Structs arbeitet: Java
Dort gibt es zwar auch int und Co., allerdings sind diese Typen nur sehr begrenzt und wer mehr damit machen möchte, muss ein Integer-Objekt daraus machen.
Jedes Mal, wenn ich mit Java arbeite (-n muss), wünsche ich mir wieder Structs und dass die vordefinierten Typen auf einen passenden Struct "gemappt" sind.

Thema: Wieso verwendet C# ein separates Typsystem mit Wertetypen?
Am im Forum: Grundlagen von C#

Ich finde bei dem Thema einen Artikel von Microsoft sehr aufschlussreich:

Auswählen zwischen Klasse und Struktur

Dort beschreiben sie auch, was die Unterschiede und die Auswirkungen davon sind.

Aber ja, im Grunde geht's eigentlich nur um Performance, aber es wäre fatal, zu glauben, man könne überall Structs nutzen, wenn man keine Klasse braucht.

Thema: Mehrere Text-Dateien von bestimmten Pfad einlesen (für GUI-Anwendung)
Am im Forum: Grundlagen von C#

Du willst die anderen Dateien in das selbe Array einlesen?
Das geht nicht.

Nimm eine Liste (List<T>) oder eine der vielen anderen Möglichkeiten (z.B. ObservableCollection<T>) dafür. Die führen intern zwar auch nur ein Array, aber die kümmern sich darum, dass dieses Array dynamisch vergrößert und effizient genutzt wird.

By the way:
Wenn Du CSV lesen willst, nimm doch eines der vorhandenen Frameworks? Die können das alle ziemlich gut und wurden millionenfach getestet.
Ich hab z.B. gute Erfahrungen mit "CsvHelper" gemacht.

Thema: JSON Dynamic Property Deserialize
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich kenne nur Json.NET bzw. Newtonsoft.Json, aber da gibt's z.B. die JObject-Klasse.
Damit kannst Du dein Json dann parsen und ungefähr so flexibel durchsuchen, wie es mit LINQ to XML möglich ist - ist vermutlich auch daran orientiert.

Was Abt genau meint, weiß ich auch nicht, aber mit JObject wäre dein Vorhaben auf jeden Fall möglich.

Thema: [erledigt] Zeit messen
Am im Forum: Grundlagen von C#

Das funktioniert nicht, weil DateTime in zu kleinen Dimensionen rechnet.
Du hast vermutlich deinen Start schon übersprungen, ohne es zu merken.

Zum Zeit messen ist Stopwatch besser, oder Du nutzt "≥"
Oder eben der Timer

Thema: Wie kann ich einen hidden value an ListBox Item anhängen ähnlich der id als "hidden" im HTML?
Am im Forum: GUI: WPF und XAML

Man kann MVVM aber auch so interpretieren, dass Models gar nicht an die View gebunden werden dürfen.
Das meine ich mit "Interpretation und Geschmack".

Ob das jetzt sinnvoll ist, muss jeder selbst entscheiden.

Thema: Wie kann ich einen hidden value an ListBox Item anhängen ähnlich der id als "hidden" im HTML?
Am im Forum: GUI: WPF und XAML

Zitat
Du mußt nicht zwangsläufig ein ViewModel bei der ObservableCollection<T> benutzen, das kann ein beliebiger Datentyp sein
Das ist doch ein ViewModel? :D
Zitat
Muss ich für jeden Listeneintrag ein Objekt von EmployeeViewModel instanziieren?
Ich sehe da kein Problem, pro Eintrag ein ViewModel zu erzeugen. Gut, sind ein paar Objekte mehr, aber solange das kein Performance-Problem ist, würde ich nicht weiter darüber nachdenken.
Außerdem hast Du später den Vorteil, dass Du das ViewModel-Objekt mit anderen View-Daten behalten und nur das Model austauschen kannst (PropertyChanged nicht vergessen), das erspart 1. aufwändiges Neu-Aufbauen der Controls pro Item (ich hatte deshalb schon mehrere Minuten Ladezeit, die ich reduzieren musste) und 2. hast Du so eine billig Art "Speicherstand", der auch nach dem Neuladen nicht verloren geht.

Alternativ kannst Du aber auch nur die Models rein stecken und neben die Liste eine "SelectedItem"-Property anlegen. Die kannst Du dann binden und weißt, welches Item gerade ausgewählt ist.
Und die "hidden" Items fügst Du einfach nicht der Liste hinzu.

Streng genommen wäre das kein reines MVVM, das erlaubt keine Models auf View-Ebene, allerdings ist das vermutlich auch eine Frage der Interpretation und des Geschmacks.
MMn. ist beides eine Option, gerade bei kleinen Projekten lohnt es nicht immer, für alles ein eigenes ViewModel zu bauen. Auf der anderen Seite musste ich aber schon oft genug ein ViewModel nachrüsten, weil ich nur so die Möglichkeit habe, zusätzliche View-Daten pro Item zu haben.

Thema: Wie kann ich einen hidden value an ListBox Item anhängen ähnlich der id als "hidden" im HTML?
Am im Forum: GUI: WPF und XAML

Zitat
Geht das irgendwie?
Diese Frage kann man prinzipiell mit "Ja" beantworten.
Und ein "Hidden Item" ist auch kein Thema, mach eben die Höhe per Style auf 0.

Aber was Du schreibst, klingt, als würdest Du alle drei Schichten ( [Artikel] Drei-Schichten-Architektur ) durcheinander werfen?
Außerdem solltest Du bei WPF nach MVVM ( [Artikel] MVVM und DataBinding ) arbeiten, das ermöglicht dir, eine sehr einfache Trennung zwischen UI und einer ViewModel-Klasse, wo Du dann dann und lassen kannst, was Du willst.

Ich würde für die Person neben dem Model noch ein ViewModel mit allen Anzeige-Daten anlegen und dann die ViewModels an die ListBox übergeben. Das ViewModel kann dann auch zusätzlich eine Property wie "IsSelected" haben, über die Du dir dann merken kannst, welcher Eintrag ausgewählt wurde.

Aber vergiss nicht: Auch in dem ViewModel hat keine Datenbank-Operation etwas verloren.

Thema: [gelöst]Klassenobjekt an generische Methode übergeben...aber wie?
Am im Forum: Grundlagen von C#

Zitat
Der Gedanke war wahrscheinlich schnell mal fertig machen, kann ich später ändern.

Daran hält man sich nie :D

Thema: [gelöst]Klassenobjekt an generische Methode übergeben...aber wie?
Am im Forum: Grundlagen von C#

Das ist so, weil der Typ beim Kompilieren noch nicht bekannt ist, Du kannst ja theoretisch alles übergeben, sogar eine Zahl.
Du kannst das Problem mit Constraints beheben, z.B. indem Du eine Bedingung für den generischen Parameter setzt.

Beispiel mit einem Interface:

public interface IHasHands
{
    public int FirstHandID { get; set; }
    public int SecondHandID { get; set; }
}

public class NonPlayerCharacter : Human, IHasHands
{
    // ...
}

public class PlayerCharacter : Human, IHasHands
{
    // ...
}

public static Weapon ReadDataCWeapon<T>(T c)
    where T : IHasHands
{
    var firstHandId = c.FirstHandID;
    var secondHandID = c.SecondHandID;

    // ...
}

Oder Du ziehst die Properties in eine Basisklasse und nimmst die als Bedingung.

PS:

Ich halte "PC" und "NPC" für grausame Klassennamen :D

Thema: Übersichtlichkeit im Programmcode
Am im Forum: Grundlagen von C#

Ich kann das mit den Regions nur bestätigen.

Zum Einen brauchst Du mehr Zeit um das zu finden, was Du suchst, da Du die Regions öffnen musst.
Wenn eine Klasse von sich aus nicht übersichtlich ist, dann hat die Klasse ein Problem, das man nicht mit Regions verbergen sollte.

Außerdem hab ich schon öffter Fälle gesehen, bei dem irgendwann Mal eine Region nicht beachtet wurde und dann hat man plötzlich Member in Regions, die da nicht hin gehören.
Das Ergebnis: Übersicht war komplett zerstört und wenn ich keine Zeit zum aufräumen hatte (also meistens), habe ich mir eben mit der Member-Übersich im Solution-Explorer beholfen.
Ach und ganz schlimm sind die Regions in einer Methode, die nicht Mal im selben Scope beginnen und enden :(

Regions mögen am Anfang vielleicht ein bisschen übersichtlicher sein, aber das bleibt eigentlich nur langfristig so und man die gleiche Übersicht auch anders erreichen.

By the way:
https://marketplace.visualstudio.com/items?itemName=Gweltaz27.IHateRegions


Und ich mag den Landwerth :D

Thema: Anmeldung nicht mehr möglich - VS 2017
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Frag doch den Support von Microsoft, wenn dir jemand den Grund nennen kann, dann sind es die.

Thema: Buch zu Design Patterns
Am im Forum: Buchempfehlungen

Ich hab dieses kleine Buch hier:

Patterns kompakt: Entwurfsmuster für effektive Software-Entwicklung (IT kompakt)

Steht zwei Mal im Namen:
Dieses Buch IST kompakt :D

Ist nicht viel mehr als eine recht umfangreiche Sammlung von Design-Patterns mit Situations-Beschreibung, Erklärung, etc.
Sehr umfassend sind die Erklärungen aber nicht, aber dafür kann man's Mal eben so mit sich herum tragen.

Thema: Excel Datei aus Resources öffnen und füllen C'# Windows Forms
Am im Forum: Grundlagen von C#

Dazu gibt's übrigens massig fertige Beispiele, man muss sie nur suchen :D

Aber noch als Zusatz:

Zum Bearbeiten von Excel hab ich das letzte Mal ClosedXML genutzt.
Ein wahnsinnig intuitives Framework, damit macht Excel bearbeiten richtig Spaß. Leider gibt's das nur für Excel.

Thema: Wie kann ich Xml Code direkt in C# Code schreiben?
Am im Forum: Grundlagen von C#

Ich hatte Mal den Fall, dass ich komplexere XML-Dokumente mit dynamischen Daten füllen und abspeichern musste. Die Struktur der Dokumente kannte ich zu dem Zeitpunkt noch nicht und es musste möglich sein, sie sehr schnell und möglichst im laufenden betrieb zu verändern.

Meine Lösung war eine Art Template, das ich als Datei neben die Exe gelegt habe, die konnte man dann auch später beliebig tauschen.
Im Programm selber hatte ich dann eine Art Mapping, welcher Wert in welches XML-Element geschrieben werden sollte, das Mapping fand mit XPath statt.
LINQ to XML (XDocument) kann XPath ganz gut, es war also ein Leichtes, die Elemente anhand des XPath zu finden und den Wert reinzuschreiben.

Geht sicher schöner, aber für meinen kleinen Anwendungsfall (und ich hatte praktisch keine Zeit) war das auch rückblickend die optimale Lösung.

Ich bin auch kein Fan davon, XML-Dokumente im C#-Code stehen zu haben, weder als String, noch als Objekt-Struktur.
XML schreit danach, dass man es immer wieder ändern muss, da will man das Programm natürlich nicht neu kompilieren müssen. Daher sollte man mMn. immer prüfen, ob es nicht besser wäre, den zusätzlichen Aufwand zu investieren und das Dokument als eigene Datei neben die Exe zu legen.

Thema: Wie kann ich Xml Code direkt in C# Code schreiben?
Am im Forum: Grundlagen von C#

Schreib es als String und Werte einsetzen geht z.B. mit String Interpolation ziemlich einfach

Thema: Floating von Stackpanel Inhalten stimmt nicht [gelöst]
Am im Forum: GUI: WPF und XAML

Dass es eine DoubleAnimation ist, beantwortet die Frage leider nicht. Die DoubleAnimation ändert auch nur eine Property, die dann die Position bestimmt.

Daher nochmal:
Dafür ist das StackPanel nicht gemacht.

Nimm einen ScrollViewer, blende die ScrollBars aus, leg das StackPanel rein und dann kannst Du super einfach per DoubleAnimation automatisch hin und her scrollen.

Thema: Floating von Stackpanel Inhalten stimmt nicht [gelöst]
Am im Forum: GUI: WPF und XAML

Was meinst Du mit "lassen sich bewegen"? Wie machst Du das?

Das Stackpanel ist nicht für die Positionierung von Controls z.B. anhand von Koordinaten gemacht, es listet eigentlich nur auf, ohne dass sich daran noch etwas ändern lässt.
Für spezifische Positionierung brauchst Du ein Canvas, das erlaubt die Nutzung von Koordinaten.

Oder willst Du die vielleicht horizontal scrollen?
In dem Fall musst Du das StackPanel in einen ScrollViewer geben und Du kannst die volle Breite des StackPanel hin und her schieben.

Thema: Consolen Programm fehlerhaft bei Leerzeichen im Pfad -> Wie Nutzung ermöglichen?
Am im Forum: Grundlagen von C#

Das funktioniert, wichtig ist, dass man sich vorher unter C:/ befindet, daher die erste Zeile:

cd c:/
cd Program Files
cd "Program Files"


Das funktioniert immer, hauptsache der Pfad ist vollständig:
cd c:/Program Files
cd "c:/Program Files"


Eine Exe Starten funktioniert auch immer, außer sie hat Leerzeichen im Namen, dann braucht's eben Anführungszeichen.
Und natürlich muss der Pfad stimmen.


Aber ja - Fehlermeldungen verraten für gewöhnlich den Fehler.

Thema: Macht es einen Unterschied, ob ich einen Task await oder durchroute, wenn der caller await'ed?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat von gfoidl
=> RCS1229: Use async/await when necessary ist aber das von Palladin007 Angesprochene.

Genau, das meine ich, besten Dank :)
Das scheint aber leider nur using-Blöcke zu unterstützen, nicht die using-Deklaration und auch keine anderen potentiellen Fallstricke, wie z.B. mit try-catch-finally.
Vielleicht kommt da noch mehr, aber using sollte erst Mal das Wichtigste sein.
Zitat von gfoidl
Und mir ist die Ausnahme (Argumentvalidierung) wieder in den Sinn gekommen. Daher verwende ich oft folgendes Pattern (mit C# 8 statischen lokalen Funktionen)

Auch wieder so ein Punkt, auf den ich noch nicht geachtet habe, danke :D

Thema: Macht es einen Unterschied, ob ich einen Task await oder durchroute, wenn der caller await'ed?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Da wäre doch ein Analyzer eine gute Idee, oder?

Also eine einfache Variante, die warnt, wenn eine Async-Methode nicht async ist, aber mehr als ein Return enthält.
Oder eine komplexere Variante, die erst warnt, wenn darin Dinge, wie z.B. usings enthalten sind.

Kennt jemand sowas?

Weil ich bin ehrlich:
An diesen Fallstrick hätte ich nicht gedacht, hatte aber zum Glück noch nie das Problem :D

Ohne so einem Analyzer würde ich aber wahrscheinlich entgegen der Empfehlung handeln, einfach nur, um diesen Fallstrick zu vermeiden, besonders wenn es keinen Unterschied macht.
Sowas könnte man dann auch im Team in einer internen Guideline festlegen.

Thema: Name eines Enums
Am im Forum: Grundlagen von C#

Zitat
Der Enum-Typ ist die Spalte und der Enum-Wert ist der Zelleneintrag.
So meinte ich das auch.

Das Vorgehen in deiner Vermutung würde ich auch so tippen, aber das halte ich für großen Mist.
Warum hat ein Enum den selben Namen, wie eine Tabelle?

Ich persönlich würde eigentlich auch keine Typ-Namen verwenden.
Das Umbenennen in VisualStudio geht für meinen Geschmack etwas zu leicht, dass man dabei solche Abhängigkeiten vergessen könnte, deshalb nutze ich an der Stelle doch lieber feste Strings, z.B. als Konstante irgendwo, oder bei einem geeigneten ORM im Mapping.

Thema: Name eines Enums
Am im Forum: Grundlagen von C#

Klingt irgendwie herzlich sinnlos ...

Was hat eine Tabelle mit einem Enum zu tun?
Das Enum sollte ein Wert in der Tabelle sein und mehr nicht.

Thema: Mit C# eine eml.Datei als anderer User öffnen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hast Du bedacht, dass eine Standard-Anwendung für eine Datei-Endung unter einem anderen Konto nicht zwangsläufig verfügbar ist?
Genauso kannst Du auch ganze Programme nur für den aktuellen User zugreifen und wenn die Anwendung unter dem anderen Konto z.B. eine Datei auf dem Desktop liegt, wirst Du die auf deinem Desktop nicht finden, sondern auf dem vom anderen Konto. Oder unterschiedliche Rechte

Aber ganz allgemein:
Lass das, das ist grober Unfug, den Du da versuchst.

Besser wäre, wenn Ihr einen extra Konto für solche Anwendungen anlegt, ohne Mensch dahinter.
Deine Anwendung kann dann z.B. als Dienst auf einem Server unter diesem Konto laufen und andere User starten eine Anwendung, die dann diesen Dienst nutzt.
Dieses Konto kannst Du dann genau so einrichten, wie Du es brauchst, inklusive Standard-Einstellungen und Co. Ich persönlich würde aber lieber direkt die exe starten und die Datei als Parameter mit geben, dann bin ich an eine Konto-Einstellung weniger gebunden, die man später vergessen könnte.

Thema: Wie kann ich an an Elemente in einem Dictionary binden?
Am im Forum: GUI: WPF und XAML

Du bindest an dein MainWindow (ElementName=MainWindow), allerdings verwendet das Binding dann die Window-Instanz als Source, nicht den DataContext vom Window.

<TextBox x:Name="LineDS001Textbox" Style="{StaticResource StandardTextbox}"
         Text="{Binding DataContext.IbisDictionary[IbisDS001].Parts[0], ElementName=MainWindow, Mode=TwoWay, StringFormat=\{0:D4\}}" />

Probier das Mal aus

Thema: Welche Visual Studio Extensions verwendet ihr so?
Am im Forum: Smalltalk

Ich würde mich wünschen, dass man den Default-Namespace pro Ordner einstellen kann.

Thema: String-Aufbau: KeyWord=Value1, Value2, Value3 - Umformatieren
Am im Forum: Grundlagen von C#

Ob es dafür einen Namen und vorhandene Klassen gibt, weiß ich nicht.
Mich erinnert es an INI-Dateien, aber die können glaube ich keine Listen.


Das Interpretieren der Daten dürfte aber nicht sehr schwer sein:

  • Splitten nach NewLine oder direkt zeilenweise lesen
  • Splitten nach Gleich-Zeichen -> Key und Werte-String
  • Splitten nach Komma-Zeichen -> Die Werte
  • Trim der Werte

Das wäre so die mit Abstand einfachste Weise, das zu lesen, beachtet allerdings keine escapten Werte.
Oder Du nutzt Regex, das bietet noch ein paar mehr Möglichkeiten, ohne riesige Mengen Code zu brauchen.

Thema: Audiodateien vor fremden Augen und Ohren schützen
Am im Forum: Rund um die Programmierung

Wir haben dein Ziel nicht und kennen es auch nicht.

Wenn ich irgendwelche Dateien (ist ja völlig schnurz, ob Musik oder nicht) vor dem unbefugten Zugriff durch Andere schützen müsste, würde ich sie verschlüsseln.
Wenn das nicht reicht und Geld egal ist, lassen sich bestimmt ein paar mehr technische Sicherungen einbauen, bis man das Gegenstück von dem hat, was Militär und Behörden einsetzen.

Und gegen Verlust hilft ein Backup, ein Backup vom Backup und so weiter, wie weit man es auch treiben will

Thema: Audiodateien vor fremden Augen und Ohren schützen
Am im Forum: Rund um die Programmierung

Abt hat doch eigentlich schon alles gesagt, was es dazu zu sagen gibt.

Dein Programm kann diese Dateien nicht zuverlässig schützen, das geht einfach nicht - nicht ohne weitere technische Ausrüstung und selbst dann gibt es Grenzen.

Dein Programm kann Daten manipulieren, also warum nicht darauf zurück greifen? Verschlüssel sie, die Methoden, die es gibt, sind zwar nicht 100% sicher (sowas gibt's nicht), aber machen es normalerweise so schwer, dass es uninteressant wird, die Verschlüsselung zu knacken.

Auf dein Kennwort musst Du natürlich immer noch selber Acht geben, wenn Du das speichern willst, hast Du wieder das gleiche Problem, nur in Grün und woanders.
Und gegen Datenverlust helfen Backups