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 LaTino
Thema: Wie kann ich in einer If-Abfrage zum nächsten Item übergehen ohne die If-Abfrage zu verlassen?
Am im Forum: Grundlagen von C#

Zitat von Krumnix
Ich habe in einer For-Schleife mehrere IF-Abfragen drin, welche mir einen String auswerten sollen.
Es sollen bis zu 40 Möglichkeiten, welche in dem String drin sein könnten, abgefragt werden und dann jeweils eine Aktion erfolgen.

Abgesehen von continue sind 40 if-Anweisungen schon ein extrem starker code smell. Solltest du dringend überarbeiten. (Außerdem [Tipp] Anfängerhinweis == true / == false)

LaTino

Thema: Empfehlung: OAuth 2 in Action
Am im Forum: Buchempfehlungen

Richer, Justin & Sanso, Antonio: OAuth 2 in Action. Manning Publications Co., 2017. ISBN 978-1-61729-327-6

Nicht nur für Webentwickler!

Die beiden Autoren wissen, wovon sie schreiben, und tun das auch noch prägnant und auf den Punkt:
- Überblick über OAuth 2.0
- detaillierte Erläuterung des "kanonischen" Autorisierungs-Prozesses (authorization code grant type)
- Programmierung eines voll funktionstüchtigen OAuth 2.0-Clients
- Variationen des Protokolls (andere Autorisierungsprozesse)
- Übliche Sicherheitsprobleme und ihre Vermeidung
- JWT und JOSE im Detail
- dynamische Client-Registrierung
- Authentifizierung mit OAuth 2.0 und OpenIdConnect
- UMA in Verbindung mit OAuth 2.0, Anwendungen von OAuth 2.0 in der Industrie (HEART und iGov)
- Beyond JWT: Proof of Possession und TLS token binding

Als Bonus gibt's beim Kauf des Paperbacks (im Handel für unter 30 Euro) das Buch als eBook in beliebigen Formaten kostenlos oben drauf (so muss das sein!) und den kompletten Quellcode der "Übungen" auf github.

Dicke Empfehlung.

LaTino

Thema: XML Datei in CSV wandeln mit LINQ gibt NullReference-Exception
Am im Forum: Grundlagen von C#

Da's noch keiner erwähnt hat:

Null Propagation

i.e.:


el?.Element("businessProcess")?.Element("processNumber")

Bei einem string.format ist zudem der cast auf string nicht nur überflüssig, sondern, da's ein "harter" cast ist, auch noch gefährlich. Dazu wäre es ein guter Gedanke, string interpolation zu nutzen.

Zu guter Letzt kann man sich angewöhnen, zu parsendes XML _immer_ zu validieren, bevor man es parst. Entweder das, oder man prüft beim Parsen, ob alle benötigten Elemente da sind (und wenn man das macht, muss an sich fragen lassen, wieso man überhaupt XML nutzt. Validierung kommt quasi kostenlos mit XML...).

Oder man lässt den ganzen händischen Kram und serialisiert/deserialisiert. Ist auch schneller und fehlerfreier geschrieben.

LaTino

Thema: Umschulung zum C# Developer - 2 Jahres Plan?
Am im Forum: Smalltalk

Zitat von Palin
Man kann ja auch festhalten, das lange der reichste Mensch jemand ist, der sich selbst Programmieren bei gebracht hat und sein Studium abgebrochen hat. Kann aber jetzt nicht jeder Bill Gates sein. ;)
Es ist immer noch ein Unterschied, ob man ein Studium in Buxtehude (nix gegen Buxtehude) abbricht oder ein Studium in Harvard ;).
Zitat
Was für mich wichtig ist ich hab eine Arbeit, die mir (meistens) Spaß macht. Ich darf mich mein Leben lang weiterbilden und neue Sachen entdecken. Und werde dafür recht gut Bezahlt. Hätte schlimmer kommen können.

So sieht's mal aus, ich hoffe, für die meisten von uns.

LaTino

Thema: Umschulung zum C# Developer - 2 Jahres Plan?
Am im Forum: Smalltalk

Zitat von Abt
Zitat von LaTino
Das ist auch kein ungewöhnliches Gehalt für einen Windows-Admin direkt nach seiner Ausbildung. Du bist da offensichtlich etwas verwöhnt :o).

Als Referenz:

Ein IT Azubi im IG Metall Tarifverbund bekommt i.d.R. ERA 7.
ERA 7 sind in BW 3046€ bei 35 Stunden - ohne Leistungszulage.

Der IG Metall Vertrag sieht hierbei 13,39 Gehälter und 30 Tage Urlaub vor.

Ergo: 40.700€ bei 35h bzw 46.600€ bei 40h

Woah. Interessant. Mir ist hier (Thüringen) keine IT-Bude bekannt, die nach Tarif zahlt. Nicht eine. Vor zwei Jahren bot mir ein Unternehmen aus Jena, bei dem ich mich nicht beworben habe, 42k (ich habe Diplom und >20 Jahre Berufserfahrung) und hielten das für normal und ausreichend für eine Abwerbung. So sieht die Realität hier aus (und ich zahl auch 1200 Euro Miete ;) ).

LaTino

Thema: Umschulung zum C# Developer - 2 Jahres Plan?
Am im Forum: Smalltalk

Zitat von UncleBens
Und - selbst ein gerade fertig gewordener - Informatikstudent, der sich mit 35k zufrieden gibt, dürfte wohl nicht so leicht zu finden zu sein...

Naja. Weder die derzeitige Beschäftigungslage noch das derzeitige Lohnniveau sind, was ich als "normal" bezeichnen würde. Als zuletzt Kurzarbeit auch in unserer Branche angesagt war, konnte man einen frischen Dipl-Inf. für 24k im Jahr bekommen. Ist dann das andere Extrem.

Zum Thema zurück: wer's wegen des Geldes macht, wird a) nicht glücklich und b) nicht reich. Der Verdienst ist eine Frage von Verhandlungsgeschick, Geschlecht, Region, Spezialisierung, Arbeitsmarkt. Pauschalaussagen bringen da nix :). Fakt ist: weder ein Fachinformatiker noch ein Dipl-Inf müssen von der Hand in den Mund leben. Und beide werden nicht von ihrem Gehalt zum Millionär.

LaTino

Thema: Umschulung zum C# Developer - 2 Jahres Plan?
Am im Forum: Smalltalk

Zitat von UncleBens
Nun könnte man die Frage stellen, ob wir überdurchschnittlich gut oder Ihr überdurchschnittlich schlecht bezahlt ;)
Eine Mischung aus beidem. Ich würde keinem Fachinformatiker direkt nach der Ausbildung mehr als 35k anbieten. Das ist auch kein ungewöhnliches Gehalt für einen Windows-Admin direkt nach seiner Ausbildung. Du bist da offensichtlich etwas verwöhnt :o).

LaTino

Thema: Nicht alle Codepfade geben einen Wert zurück
Am im Forum: Grundlagen von C#

Zitat von Timmi
Aber verstehen, wo der Codepfad ist, der keinen Wert zurückgibt. Denn wenn beide Schleifen mindestens einmal durchlaufen, komme ich doch immer entweder in if oder in else an.

Das ist etwas, das du weisst. Der Compiler versteht die Signatur von Methoden - was kann rein, was kann rauskommen - aber er weiß nichts über ihre Funktion. Schauen wir uns mal Array.GetLength() an:
Zitat von MSDN
Parameter
dimension
Type: System.Int32
Eine nullbasierte Dimension des Array, deren Länge bestimmt werden soll.

Rückgabewert
Type: System.Int32
Eine 32-Bit-Ganzzahl, die die Anzahl der Elemente in der angegebenen Dimension angibt.

Die Methode könnte also negative Werte zurückgeben, wie 123thomas gesagt hat. Man lernt als Programmierer mit der Zeit, den Code auch aus Sicht des Compilers zu sehen und entsprechend defensiv (für alle Eventualitäten, auch die, die gar nicht eintreffen dürften) zu programmieren. In diesem Fall erzwingt der Compiler diese defensive Programmierung zum Glück.

Abschließend noch ein anderes Beispiel:


class Example 
{
    public virtual int GetValue(int input) => Math.Abs(input);
}
//Anwendung analog zu deinem Beispiel mit GetLength.
void int DoSomething()
{
    Example example = GetExample(); //irgendwoher geliefert
    for(int i = 0; i < example.GetValue(j); ++)
        return bedingung ? 0 : 1;
}

So. Stellen wir uns mal kurz vor, der Compiler würde das zulassen nach dem Motto "der Programmierer weiß schon, was er tut".

Und jetzt kommt der Kollege, der für die GetExample()-Methode zuständig ist, auf folgende Idee:


class OtherExample : Example
{
    public override int GetValue(int input) => input;
}

...und dein Code geht den Bach runter. Und deshalb programmiert man für die Signatur einer Methode, nicht für ihre Bedeutung.

LaTino
EDIT: das ist nicht an den Haaren herbeigezogen. Bei uns ist das eine der häufigsten Gründe für fehlschlagende Unit Tests. (Es gibt reichlich Situationen, wo dich der Compiler nicht zwingen kann, defensiv zu programmieren.)

Thema: Wie kann ich mit C# NFC auslesen?
Am im Forum: Rund um die Programmierung

Hängt ein bisschen davon ab, womit du die App erstellen möchtest. Ich bin kein Xamarin-Experte, aber mein erster ANlaufpunkt wäre da zum Beispiel Android.Nfc.NfcManager Class gewesen.

LaTino
(falsches Forum, übrigens)

Thema: Nicht alle Codepfade geben einen Wert zurück
Am im Forum: Grundlagen von C#

Zitat von Timmi
Es gibt hier doch nur zwei Codepfade, oder nicht? Und beide geben etwas zurück.

Vielleicht solltest du nicht mit dem Compiler über die Anzahl der vorhandenen Codepfade diskutieren, da verlierst du ;). Kurze Frage: wie lautet der Codepfad für csvText.GetLength(0) == 0 und csv.GetLength(1) == 0?

LaTino

Thema: Text aus einem anderen String kopieren
Am im Forum: Grundlagen von C#

Wie überall gibt es auch hier eine Alternative:

  1. zu https://regex101.com/r/GUH3IH/2/ gehen
  2. mit Hilfe der Erläuterungen (rechts oben) verstehen, was passiert
  3. auf "Code Generator" (links mittig) klicken
  4. auf C# klicken
  5. Code übernehmen und verstehen

Vorteil: du kannst sehr komplexe Suchmuster implementieren.
Nachteil: Regex muss man lernen, und der Einstieg ist nicht einfach. (verlinkte Seite hilft etwas)

LaTino
(EDIT: shame on me, hab Abts Hinweis auf regex übersehen. Aber der Link hilft vielleicht noch etwas mehr.)

Thema: Wie kann ich Daten, bevor ich sie über ein UI in die DB absende, validieren?
Am im Forum: Datentechnologien

Was sind "falsche Eingaben"? Ich kann prinzipiell jede Benutzereingabe nehmen und in die Datenbank schieben.

Das einfachste ist: benutz das Control, das nur die Art Eingaben zulässt. NumericUpDown für Zahlen, DatePicker für Datumsangaben, Textbox für Text, Checkbox für bool.

Dann kannst du dir syntaktische Validierungen zumeist sparen. Um semantische Validierung kommst du nicht herum. Die Anforderung, dass in Spalte "c" von Tabelle "xy" nur Zahlen stehen dürfen, die nach Uhrzeit eines bestimmten Client-Rechners bei Vollmond den Wasserstand in Köln darstellen, wenn dieser auf eine Primzahl endet, musst du nach wie vor von Hand machen, weil das Datenbanken eben nicht abbilden können.

LaTino

Thema: Beim Programmstart eine von zwei Methoden über einen Delegaten ausführen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat
Ein Delegate ist schließlich ein Funktionszeiger

Dann hast du das Konzept nicht verstanden. Delegaten sind mitnichten Funktionszeiger. Diese Erklärung wird gern verwendet, um das Konzept Leuten zu erklären, die wissen, was Funktionszeiger sind. Der Grund ist, dass beide Konzepte denselben Zweck erfüllen. Du kannst aber gern mal versuchen, in C++ mit Funktionszeigern multicasting abzubilden. Oder co- und Kontravarianz abbilden beim Zuweisen. Oder beim Verwenden als Methodenparameter.

LaTino

Thema: Mit C# Programm, aus einem PDF bestimmte Seiten drucken
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat von Marccore
Habt ihr da eine Idee ob das überhaupt möglich ist?

Möglich ist prinzipiell immer alles.
Schau dir mal pdfview4net an.

LaTino

Thema: Beim Programmstart eine von zwei Methoden über einen Delegaten ausführen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat von mardem80
Ich habe den Fehler gerade gefunden, da ich die falsche Methode an den Delegaten übergeben hatte!

Naja, prinzipiell ist an dieser Stelle wirklich Quatsch, einen eigenen Delegaten zu deklarieren.


void UseDelegate(Action performAction)
{
    performAction();
}

UseDelegate(() => Console.WriteLine("hello"));
UseDelegate(() => MessageBox.Show("world"));

Mit anderen Worten: statt delegate void MyDelegate(); gibt es Action, die du einfach initialisieren kannst:


Action example = () => Log("Beispiel");

[Artikel] Delegaten, anonyme Methoden, Lambda-Ausdrücke & Co.

LaTino

Thema: Wie kann ich Daten, bevor ich sie über ein UI in die DB absende, validieren?
Am im Forum: Datentechnologien

Zitat von Menten
Und das war meine eigentliche Frage. Wie ich die Oberfläche so anbinde, das der User keine Eingaben machen kann, die hinterher nicht in die DB passen. Das Problem habe ich doch unabhängig davon wie der Datenbank-Zugriff erfolgt.

Uh. Ich bin ein bisschen fasziniert davon, dass es es so eine Herangehensweise noch gibt; zuletzt habe ich dieses GUI-Entwicklungsparadigma im TeamDeveloper 2000 (aus eben jenem Jahr) von Gupta/Centura gesehen. Und diese Oberflächen waren träge, unflexibel, konnten nur auf einer bestimmten Datenbank laufen (deren Struktur man um Himmels Willen nicht anrühren durfte) und benötigte einen Heidenaufwand, um die Datenbank so vorzubereiten, dass das Programm dann auch lief. Im Wesentlichen war das nichts anderes als MS-Access-Masken für Fortgeschrittene.

Der Punkt ist der: die Datenbank speichert deine Daten. Sie kennt deren Form nicht, sie kennt deren Bedeutung nicht, sie kann auch nicht validieren, ob ein Datensatz gespeichert werden kann (wenn der Typ stimmt). Nichts davon. Und weil sie das nicht wissen kann und auch nicht wissen soll (!!), ist sie auch nicht in der Lage, irgendwem mitzuteilen, wie die Oberfläche auszusehen hat, die "korrekte" Daten erzeugt. Ja, Erstimplementierungen von Oberflächen, wenn man es richtig macht, brauchen etwas Zeit: Validierungen wollen geschrieben werden, eventuell braucht man Controls, und so weiter und so weiter. Allerdings gibt es für beides Schnittstellen, die das Leben leichter machen. Dazu kommt, dass man im Lauf der Zeit eine eigene Bibliothek aus Basisforms, Validierungen und Controls erhält. Unser ERP hat irgendwas im deutlich vierstelligen Bereich an Oberflächen, und eine neue Stammdateneingabe inklusive Validierung zu erstellen, ist eine Sache von 5-10 Minuten.

Du müsstest dafür allerdings deine Komfortzone verlassen und die Art und Weise, wie du bisher Datenbanken und Oberflächen entwickelt hast, hinter dir lassen. Ansonsten gilt, was FZelle gesagt hat.

LaTino

Thema: C# Html-input-Felder auslesen
Am im Forum: Web-Technologien

Dir ist schon klar, dass das Beispiel da oben nur 3-5 Zeilen wirklichen Code enthält und der Rest ein paar Deklarationen sind? Anders ausgedrückt: nee, noch einfacher wird's nicht.

LaTino

Thema: C# Html-input-Felder auslesen
Am im Forum: Web-Technologien

Dein Code kennt zwar die Namen deiner Textboxes, aber nicht ihre Bedeutung. Genauso kennt er auch die Bedeutung der ausgelesenen INPUT-Elemente nicht - das musst du ihm schon beibringen.

Eine schnelle Möglichkeit dazu:


public class ExampleController : INotifyPropertyChanged
{
    private string _givenName;
    private string _familyName;
    
    public string GivenName 
    {
        get { retzurn _givenName; }
        set 
        {
             _familyName = value;
             OnPropertyChanged(nameof(FamilyName));
        }
    }
    public string FamilyName
    {
        get { retzurn _familyName; }
        set 
        {
             _familyName = value;
             OnPropertyChanged(nameof(FamilyName));
        }
    }

    public void Initialize(IEnumerable<HtmlElement> inputElements)
    {
         GivenName = inputElements[0];
         FamilyName = inputElements[5];
    }
}

public class MyForm:Form
{
    public void InitController(ExampleController controller) 
    {
         textbox1.DataBindings.Add("Text", controller, "GivenName");
         textbox2.DataBindings.Add("Text", controller, "FamilyName");

        HtmlElementCollection elems = webBrowser1.Document.GetElementsByTagName("INPUT");
        controller.Initialize(elems);
    }
}

Durch die Initialize()-Methode ordnest du einzelnen Inputs eine Bedeutung zu und speicherst sie, und durch das Binden an den Controller, der die gespeicherten Werte hält, gibst du den Textboxes eine Bedeutung.

Ist nur eine Schablone, ich würde von copy&paste absehen ;).

LaTino

Thema: [gelöst] IF Bedingung nicht korrekt ausgewertet
Am im Forum: Rund um die Programmierung

Zu dem, was Taipi88 grade sagte, noch ein wenig Lesestoff:

ServiceLocator is an anti-pattern

(Beim refactoring im Hinterkopf behalten)

LaTino

Thema: [GELÖST] Änderungen in Hashtable 1 werden auch für kopierte Hashtable 2 übernommen
Am im Forum: Grundlagen von C#

Du hast Karl, Heinz und Peter.

Die schiebst du in die Klasse 6a.
Außerdem schiebst du die drei in die AG "Programmieren".

Jetzt schneidest du Karl aus der 6a die Haare und wunderst dich, dass auch Karl in der AG "Programmieren" kurze Haare hat.

Überraschung!


var backupList = originalList.Select(p => (MyType)p.Clone()).ToList();

Je nach MyType unbedingt prüfen, ob evtl eine deep copy nötig ist.

LaTino

EDIT: dann stehst du natürlich vor der Aufgabe, herauszufinden, ob ein Objekt überhaupt geändert wurde (ob man es Speichern muss, zB). Und weil du nicht der erste bist, der so etwas machen will, gibt es seit >20 Jahren das Command-Entwurfsmuster, das solche umständlichen Transaktionen wie das Kopieren von Objekten elegant umgeht.

Thema: AND-Operator Beinhaltet Zahl
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Siehe mein Edit. (Math.Pow ist an der Stelle leichter lesbar, daher. Normal nimmt man natürlich die bitverschiebung). Und nein, zum Ausmaskieren checkt man auf 0.

LaTino
EDIT: viel zu selten verlinkt: [Artikel] Bitoperationen in C#

EDIT (letzter Edit, ich schwör): @th69 jetzt weiss ich, was du machen möchtest...wenn du so vorgehen willst, checkst du, ob bit i als einziges bit gesetzt ist. ((1 << i) & dataAsNumber) == (1 << i)) würde sogar gehen dann. Wenn man wissen will, ob bit i gesetzt ist, checkt man auf != 0.

Thema: AND-Operator Beinhaltet Zahl
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Da fragt man sich schon, was du da eigentlich erreichen möchtest und wieso du jedes mal noch auf binär verweist...du machst da Handstände, wo nicht klar ist, wozu.


var data = " ;0002";

var dataAsNumber = Convert.ToInt32(data.Trim(' ',';'), 16);

for (int i = 0; i < 12; i++)
{
    if(((int)Math.Pow(2,i) | dataAsNumber) == dataAsNumber) Console.WriteLine($"Eingang {i+1} ist an.");
}

LaTino
EDIT: mal abgesehen von deiner umständlichen Weise, eine hex-Zahl auszulesen - beim zweiten Lesen scheint mir, als ob dir einfach nicht klar ist, wie der bitweise &-Operator funktioniert.

Binär 5: 101
Number in deinem Beispiel: 2 entspricht 010

&-Verknüpft: Ergebnis ist 000 (exp 2: 1 & 0 = 0, exp 1: 0 & 1 = 0, exp 0: 1 & 0 = 0, macht 000)
000 ist 0 (in jeder Zahlenbasis ) und das ist != number (s.o., ist 2).

Für eine Prüfung "ist bit i in Zahl n gesetzt?" lautet die bitweise Operation:
(n | 2^i) == n ("wenn ich an Stelle i das Bit auf 1 setze, bleibt der Wert dann gleich?")

Alternative Prüfung dazu (wie die funktioniert, ist Hausaufgabe :evil: ):
(n & (1 << i)) != 0

Aber das sind eigentlich wirklich Grundlagen.

Thema: VS2017 Methoden anstatt Eigenschaften?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Du bist da ein bisschen auf dem Holzweg. Was du da hast, ist kein Vorschlag, sondern eine Quick Action, d.h. eine mögliche Refaktorierung, die du an der Stelle vielleicht vornehmen willst. Dh das ist nur eine Hilfe für den Fall, dass du die Property umgestalten willst. Hast du das nicht vor - ignorier die quick action :). Ein besseres Beispiel für eine derartige Quick Action nwäre zB die angebotene Möglichkeit, ein if-else-Statement in ein switch umzugestalten (und anders herum). Auch das ist nicht BESSER, nur anders.

Und ja, sowohl die Stelle als auch die Art der Umgestaltung sind eher...dämlich. Dedizierte Tools wie Resharper spielen da immer noch in einer ganz anderen Liga. Im Anhang Resharpers Vorschläge (die Quick Action ist immer noch da, 5. Option im Screenshot).

Grüße,

LaTino

Thema: Wie aus einem Rechteck mit aneinandergehängten Dreiecken ein Kreisdiagramm erstellen?
Am im Forum: GUI: WPF und XAML

Ich sag's ungern, aber dein Bild besteht aus 8 Polygonen, von denen nur 4 Dreiecke sind...

LaTino

Thema: .net Core: Umstieg von Windows zu Linux
Am im Forum: Smalltalk

Nunja, xbox revenue allein ist so bei 2-3,5 mrd USD / Quartal (schwankt halt quartalsweise recht stark), Surface geht zwischen 800 Mio und 1.5 Mrd USD - damit ist man schon jenseits von 15-20% Consumer und hat die letztens sehr, sehr starke Consumer-Office-365-Sparte noch nicht mal berücksichtigt.

Wie dem auch sei: Apple hat (wenn ich die Zahlen richtig im Kopf habe) 2017 fast 10mal soviel verdient (um die 40 Mrd Profit) wie Microsoft, und zwar (beinahe) ausschließlich mit B2C. Der Vergleich hinkt also wirklich.

LaTino

Thema: .net Core: Umstieg von Windows zu Linux
Am im Forum: Smalltalk

Zitat von Abt
Tut mir wirklich leid, dass ich nicht alle Produkte der letzten 27 Jahren aufgelistet hab.

Darum ging's nicht. Das von dir skizzierte Bild des Konzerns, der von B2B lebt und keine Ahnung von B2C hat, ist einfach nicht richtig. Ein kurzer Blick in die Finanzberichte zeigt das. Microsoft hat drei Reporting-Segmente, und das Consumer-Segment ("More Personal Computing", ausschließlich Consumer-Geschäft plus Bing) ist das mit Abstand größte. Microsoft kann man also nicht als B2B-Konzern bezeichnen, und erst recht ist die Aussage, 90% des Umsatzes sei aus B2B-Geschäften, einfach mal komplett falsch. Richtig ist lediglich, dass die Ausrichtung des Konzerns überhaupt nicht mit bspw. Apple vergleichbar ist.

LaTino

Thema: .net Core: Umstieg von Windows zu Linux
Am im Forum: Smalltalk

Zitat von Abt
Aber ja, Microsoft hat von Konsumgütern absolut keine Ahnung in meinen Augen - bis auf die Surface Reihe.

Xbox.
Die sehr erfolgreichen Mäuse.
Natural keyboard. (wie lange gibt's die Reihe jetzt schon? 20 Jahre?)

"absolut keine Ahnung"....aha.

LaTino

Thema: (int) gibt anderen Wert zurück als Convert.toInt32
Am im Forum: Grundlagen von C#

Die Antworten (EDIT: bis auf p!lle) stimmen zwar inhaltlich, erklären aber nicht das Phänomen, das wir hier haben.

Was hier steht:


Console.WriteLine((int)(100 * 18.9));
//Output: 1889
//übrigens:
Console.WriteLine(100 * 18.9); //hu?

Obacht beim Arbeiten mit Gleitkommazahlen :).

LaTino
EDIT: wer sich fragt, was da beim "hu?" los ist: https://referencesource.microsoft.com/#mscorlib/system/double.cs,de581d5a1a6b2a1a

Thema: Programm metrisch <=> UI in Zoll (Umrechnung)
Am im Forum: GUI: Windows-Forms

Die Klasse, die du oben erwähnt hast, mit Property A - wo du eine Instanz hast, an die dein Form gebunden ist - das ist eigentlich schon ein Controller. Er vermittelt zwischen View und Model(s) und steuert das Verhalten und den Zustand der beiden. Dazu braucht er eine Abbildung von eventuellen UI-Logiken (zB Validierung, interessiert uns an der Stelle nicht) sowie Kenntnis darüber, wie Daten aus dem Model bei ihrer Anzeige umzuformen sind. Punkt 1 lagerst du in eine Basisklasse aus, Punkt 2 in konkrete Implementierungen dort, wo sie sich unterscheiden, in deinem Fall eben bei den verwendeten Skalen.

LaTino

Thema: Programm metrisch <=> UI in Zoll (Umrechnung)
Am im Forum: GUI: Windows-Forms

Zitat von Turmoil
Guten Morgen.

Ich werde euren Rat befolgen und alle Properties des Models in den Controlern bereitstellen obwohl m. E. weder das Model noch die Controler eigentlich wissen müssten, welches System in der GUI eingestellt ist (ähnlich dem Dezimaltrennzeichen).

Der Controller steuert die UI. Natürlich sollte er über ihren Zustand informiert sein. Tatsächlich ist er sogar der einzige, der ihren Zustand ändern darf. Das Model braucht diese Information wirklich nicht.

LaTino