Laden...
Avatar #avatar-4122.png
LaTino myCSharp.de - Experte
Softwareentwickler Thüringen Dabei seit 03.04.2006 3.003 Beiträge
Benutzerbeschreibung

Forenbeiträge von LaTino Ingesamt 3.003 Beiträge

23.04.2021 - 06:04 Uhr

ILIst ist ein bisschen Kanone auf den Spatzen, der vorgeschlagene Indexer kommt deiner Anforderung am nächsten:


class Test
{
    private string[] _array = new string[] { "Element 1", "Element 2", "Element 3" };
    public string this[int index] 
    {
        get => _array[index];
        set 
        {
            onItemChanged(index);
            _array[index] = value;
        }
    }
    
    private void onItemChanged(int index) => Console.WriteLine(index); // todo
}
class Program
{
    static void Main(string[] args)
    {
        Test test = new Test();
        test[1] = "Ersetze dieses Element";
    }
}

Natürlich vor dem Zugriff auf's Array immer schön prüfen, ob es das Element überhaupt gibt.

Grüße,

LaTino

30.11.2020 - 09:59 Uhr

Nachtrag:
Ich bin seit September nach fast 20 Jahren Visual Studio auf Rider umgestiegen. Für so ein Gewohnheitstier, wie ich es bin, ein riesiger Schritt. Jetzt, ein Vierteljahr später, sind die schlimmsten Entwöhnungserscheinungen erledigt und ich muss sagen, ich bin ziemlich happy mit der IDE. Ich kann aber nicht sagen, wie gut oder schlecht sich Windows.Forms oder WPF damit entwickeln lassen, ist nicht mein Anwendungsfall. Wer die Möglichkeit hat, sollte Rider ruhig mal eine Chance geben.

LaTino
(der nächste XPS kann dann eine Developer Edition mit Linux werden :evil🙂

23.10.2020 - 05:51 Uhr

Hi,

gerade dreimal versucht, einen Text zu posten, der einen Emoji enthielt (eingefügt über Win+.). Dreimal Fehler - nur dieses eine Zeichen entfernt, und es ging.

Es handelte sich um U+1F644 (das Augenrollen).

Grüße,

LaTino

23.10.2020 - 05:49 Uhr

Seit die Möglichkeit existiert, nutze ich anstelle der Kreditkarte Android Pay, verknüpft mit Paypal. So landen die Informationen zu Kreditkarte oder Bankkonto nicht mehr beim Zahlungsempfänger, und es ist nur noch eine Frage, ob man eben Paypal traut oder nicht. Kann jeder für sich entscheiden, und ich verstehe auch jeden, der's nicht tut.

Ganz ohne Kreditkarte würde mir mein Alltag inzwischen sehr schwer fallen, ich benutze die eigentlich seit 2006/07 als bevorzugtes Zahlungsmittel. Auch wenn das in Deutschland immer noch nicht überall geht (im Jahr 2020, in einer Pandemie, kriegt man immer noch "wir können nur EC-Karte", "nein, kontaktlos geht leider nicht" zu hören...).

LaTino

14.09.2020 - 06:45 Uhr

.NET Core / .Net 5
Editor: Visual Studio Code (keine Lizenzgebühren, frei verfügbar, alle gängigen Betriebssysteme)

Für das, was du deinen Schülern beibringen willst, brauchst du keine IDE. Ein Editor reicht, dann liegt der Fokus auch auf dem Programmieren und nicht auf der IDE (mal abgesehen davon, dass ich dir die Kompatibilitätsprobleme von Projektmappen zwschen 2017 und 2019 nicht abkaufe. Die sind identisch.) Ich erinnere mich dunkel, dass wir in der Java-Vorlesung erstmal zwei Stunden mit EInführung in Eclipse verbracht haben. Unnötig, umständlich, langweilig.

Die Hinweise hier gehen alle in die Richtung, dass die Nutzung der moderneren, schlankeren, leichter zugänglichen Variante von .NET empfohlen wird. Und das zu Recht. Offen gesagt, lesen sich deine Antworten dagegen eher so, dass du dir einen ganz anderen Aufwand sparen möchtest. Nämlich den, etwas neues zu lernen.

Grüße,

LaTino (selber hin und wieder Kursleiter)

27.06.2020 - 11:52 Uhr

Das hängt stark davon ab, was du mit Resharper am häufigsten tust. Den von dir erwähnten Zweck zB nutze ich (private Lizenz seit 2014) überhaupt nicht, bzw. er ist mir unwichtig.
Für die von mir am häufigsten genutzten Funktionen gibt es schlicht keine Alternative, von Rider vielleicht abgesehen.

Und die gut 100 Euro im Jahr ist das Stück Software auf jeden Fall wert. Das sind sehr grosszügig gerechnet 5 gesparte Stunden Arbeitszeit pro Jahr, ab denen sich das lohnt (realistisch deutlich weniger).

LaTino

10.06.2020 - 11:17 Uhr

Update der Package Microsoft.EntityFrameworkCore von 3.1.1 auf 3.1.5 hat das Problem beseitigt. Ich habe in den Readmes keinerlei Hinweis auf eine Änderung diesbezüglich gefunden. Nicht die erste Änderung in net core 3.1, die unsere Build-Pipeline zerschießt. Ärgerlich, unnötig.

LaTino

09.06.2020 - 14:12 Uhr

So, ich habe noch einmal etwas gebuddelt. Das Problem haben wir uns mit einer Abhängigkeit auf Microsoft.EntityFrameworkCore eingetreten. Das NuGet-Package listet die drei Abhängigkeiten auch auf - die Merkwürdigkeit ist also, dass die Bibliotheken unter Windows fehlen, und nicht, dass sie unter Linux auftauchen.

Interessanterweise:


dotnet new console -o Example
cd Example
dotnet add package Microsoft.EntityFrameworkCore
dotnet publish ./Example.csproj -o ../publish -c Release 
ls ../publish

..führt dazu, dass die Bibliotheken auch unter Windows im Ausgabeverzeichnis liegen.

Es liegt also vermutlich am Projekt, wobei ihr mir nicht wirklich helfen könnt. Ich werde die Abhängigkeiten mal Stück für Stück entfernen / wieder einfügen und schauen, ob das einen Effekt hat. Sollte ich über die Lösung stolpern, melde ich mich wieder.

LaTino

08.06.2020 - 18:05 Uhr

Nein. Allerdings ist es tatsächlich dasselbe (nicht nur das gleiche) Problem.

LaTino

08.06.2020 - 16:33 Uhr

Enschuldige, dass ich erst jetzt antworte.

gibt es diese Unterschiede auch wenn nur

  
dotnet publish ./PROJECTNAME/PROJECTNAME.csproj -c Release  
  

verwendet wird?

Ja. Exakt dieselben drei Dateien.

Der Punkt, den ich nicht nachvollziehen kann, ist dieser hier:

Durch die Angabe der Ziel-Runtime --runtime win-x64 wird entweder "cross compiled" od. nicht. Daher kann es -- auch beeinflusst von den NuGet-Referenzen -- zu Unterschieden der Build-Ausgabe kommen.

Mein zugegeben unvollständiges Verständnis des Vorgangs ist, dass eben gegen die entsprechenden Bibliotheken der Zielplattform kompiliert wird. Die drei unter Linux eingebundenen Bibliotheken werden auch nicht genutzt - sonst würde das unter Windows erzeugte Ergebnis, dass diese Bibliotheken nicht hat, ja gar nicht laufen.

Ich hätte das als reine Unschönheit abgetan, allerdings verursachen die verschiedenen Ergebnisse einen Schluckauf in unserer Gitlab-Pipeline, der langsam echt störend wird.

Grüße,

LaTino

29.05.2020 - 16:31 Uhr

Hi,

ich bin heute über eine Merkwürdigkeit gestolpert, für die ich keine Erklärung habe. Wir haben GitLab im Einsatz, einige Runner unter Linux, einige unter Windows. Mir ist heute aufgefallen, dass die Ergebnisse des "dotnet publish" Befehls für dieselbe Target Runtime unterschiedliche Ergebnisse erzeugen.

Der publish-Aufruf


dotnet publish ./PROJECTNAME/PROJECTNAME.csproj -c Release --runtime win-x64 --self-contained false

Das Ergebnis, das die Linux-Runner erzeugen, enthält drei Dateien, die die Windows-Runner nicht dazupacken:

  • System.Collections.Immutable.dll
  • System.ComponentModel.Annotations.dll
  • System.Diagnostics.DiagnosticSource.dll

Ich war bisher davon ausgegangen, dass ich mich darauf verlassen kann, dass ein und derselbe Befehl in ein und derselben SDK-Version zu ein und demselben Ergebnis führt. Das jetzt verunsichert mich doch ziemlich.

Hat jemand eine Erklärung?

LaTino

30.04.2020 - 06:00 Uhr

@LaTino
Das klingt wirklich nach harter Belastung. Bist du Alleinerziehend oder kann dich deine Frau da nicht unterstützen?

Meine Frau ist "systemrelevant" (im Gegensatz zu all den anderen Berufen, auf die man offensichtlich verzichten kann 🤔 ). Und natürlich unterstützt sie, wo sie kann, aber wir sehen uns quasi nur zwischen 17 und 20 Uhr und sehr früh morgens 🙂. Ich glaube auch nicht, dass wir da eine Ausnahme sind, das dürfte vielen so gehen. Und die Alleinerziehenden mit 2 oder mehr Kindern...in deren Haut möchte ich nicht stecken.

27.04.2020 - 10:06 Uhr

Hoffe doch, dass du durch hälst bis alles mehr oder weniger vorüber ist. 😉

Das geht schon, man muss mehr drauf achten, sich nicht zu verbrennen. Viel schlimmer ist für Kinder in dem Alter, wochenlang (meine: seit 7 Wochen) kein anderes Kind, geschweige denn ihre Freunde, zu sehen. Der Aspekt kommt in der öffentlichen Diskussion kaum vor, es geht fast nur darum, wann die Eltern denn nun wieder arbeiten können. Ist das erste mal, dass ich deutlich merke, wie wenig Kinder in diesem Land zählen und wie tief das im gesellschaftlichen Mindset verankert ist. Gruselig.

LaTino

27.04.2020 - 05:15 Uhr

Abgesehen von den privaten Belastungen * habe ich weder privat noch das Unternehmen, für das ich arbeite, Einbußen zu verzeichnen. Liegt sehr wahrscheinlich an der Branche, die eine der krisenfesteren ist.

LaTino

  • ich stehe fünf auf, arbeite bis halb acht, betreue dann die 3jährige (und nein, da kann man nicht nebenbei arbeiten), arbeite, falls der Mittagsschlaf klappt, zwischen 12 und 14 Uhr noch etwas, und dann ab 20 Uhr bis mindestens Mitternacht. Es ist etwas zermürbend auf Dauer und bestimmt auch nicht gesund, aber dafür habe ich das Privileg, keine anderen Einbußen zu haben.
30.03.2020 - 14:53 Uhr

Der ?-Operator ist auch nur Syntax-Zucker für ein if.
Nur mit Grundrechenarten aber sehe ich keine Chance. Wenn Bitoperationen gehen, dann schon.

LaTino

24.03.2020 - 06:18 Uhr

(Plus bisschen Speicher gegebenenfalls.) B1s ist auch das, mit dem ich nahezu immer starte, wenn ich auf die Schnelle was Preiswertes suche. Kann ich empfehlen.

LaTino

23.03.2020 - 12:55 Uhr

@MrSparkle, letzte Reaktion hier von mir, entschuldige bitte 😮)

Die Politik (nachträglich) zu kritisieren, ist leicht. Es besser (gemacht) zu machen, schon sehr viel schwieriger.

Ich meine die Situation im Gesundheitswesen im Allgemeinen und die schlechte Vorbereitung und langsame, dann aber aktionistische Reaktion.

Und nein, "mach's besser" ist keine angemessene Reaktion, sondern unlauter argumentiert. So stehlen sich nur Leute aus der Verantwortung, die sie freiwillig übernommen haben. Niemand hat irgendwen gezwungen, Politik zu machen. Selbstverständlich wird auch nicht erst kritisiert, seit die Krise da ist, sondern schon sehr lange vorher. Es hat nur keinen interessiert.

Im übrigen muss ich auch keinen Film drehen oder ein Buch schreiben können, um beurteilen zu können, ob ein Buch oder Film handwerklich schlecht sind. Dieses Argument lasse ich nicht gelten. (Meine Frau arbeitet im Gesundheitswesen, ich kriege hier seit Jahren mit, wie nur noch auf Verschleiß gefahren wird. Soll mir keiner erzählen, damit hätte keiner rechnen können.)

So, das soll's gewesen sein. Wie gesagt, wer mitgemacht hat: danke für den Enthusiasmus und den Versuch, ich drücke die Daumen, dass es nicht umsonst war.

Grüße,

LaTino

23.03.2020 - 12:03 Uhr

Mich macht die Aktion eher wütend. Placebo-Aktionismus, der ein bisschen Futter für die Presse liefert, und die Verantwortung für die Lösung politikverschuldeter Probleme wird elegant an die Nerds weitergereicht, die sich dafür instrumentalisieren lassen.

Nichts gegen die Leute, die mitgemacht haben. Ich hoffe, sie hatten Spass, haben was gelernt und interessante Leute kennengelernt. Ich fürchte aber, die praktischen Auswirkungen werden sich auf ein paar wohlwollend-herablassende Presseartikel beschränken.

Ich lasse mich sehr gern eines Besseren belehren, allein, mir fehlt der Glaube.

LaTino

17.03.2020 - 12:09 Uhr

https://twitter.com/brenankeller/status/1068615953989087232

Wäre das Testen von Code ein gelöstes Problem, gäbe es weder Witze darüber, noch fehlerhafte Software.

Ein Testcoverage-Tool, das dir anzeigt, welche Zeilen bereits im Rahmen eines Tests durchlaufen wurden, kann helfen, ungeprüfte Fälle zu finden. Ich benutze dafür dotcover (Resharper). So ein Tool prüft natürlich nicht, ob das Test selber die richtigen Überprüfungen macht. Ist aber dennoch ein sehr guter Helfer dabei, Testfälle zu entdecken, die man übersehen hatte.

LaTino

15.03.2020 - 20:28 Uhr

Ich finde auch die Aussage irritierend, Unit Tests würden hier nichts nutzen, weil man ja etwas übersehen würde.

"Wir können Methode xy nicht benutzen, weil wir sie falsch/unvollständig nutzen würden."

Äh, was?

Inputvalidierungen lassen sich sehr gut per Komponententest prüfen. Voraussetzung wäre natürlich, dass man weiss, was ein valider Input ist. Andererseits macht die Angabe "validiere xyz", ohne festzulegen, was ein valider Wert ist, noch weniger Sinn als die Aussage oben.

LaTino
(Disclaimer: Wenn die Teststrategie NUR aus Komponententests besteht, ist selbstredend auch was verkehrt. Mich hatte nur die Aussage irritiert.)

14.02.2020 - 07:31 Uhr

Der Urheber ist nicht mehr bei meinem AG beschäftigt. Seinem Code nach zu urteilen, hat er aber sehr oft "nachts gearbeitet". Der ist jetzt übrigens (wieder) in der Lehre beschäftigt - lehrt OOP. Manche Geschichten kann man sich nicht ausdenken.

LaTino

13.02.2020 - 10:46 Uhr

public static Nullable<T> GetEnum<T>(int? EnumInt) where T : struct {
    foreach (var item in Enum.GetValues(typeof(T))) {
        if ((int)item == EnumInt) {
            return (T?)item;
        }
    }
    return null;
}

Okay, soweit, so...ungewöhnlich, aber gut, wenn einer das lieber selber macht als die .NET-Methoden zu nehmen, des Menschen Wille ist sein Himmelreich.

Aber dann. Die Methode wird zweimal verwendet. Beide Male so:


(MyEnumType) Utils.GetEnum<MyEnumType>((int) data.Property)

Die Punchline? data.Property ist vom Typ MyEnumType.
Wir nehmen das Enum, casten nach int, werfen das int in eine Methode, die einen Nullable von dem Enum baut, von dem wir kommen, und casten dieses Nullable dann hart in den Ursprungstyp.

*mikedrop*

LaTino

31.01.2020 - 08:17 Uhr

Du kannst den JsonConverter auch direkt beim (de)serialisieren übergeben. Dafür muss keine beteiligte Klasse angefasst werden.

LaTino

31.01.2020 - 07:56 Uhr

Wie Abt direkt in der ersten Antwort schrieb.


var filteredCities = await _context.Cities.Where(p => p.Name.Trim().Contains(' ')).ToListAsync();

Übrigens ist auch dein SQL nicht ganz korrekt.

LaTino

06.01.2020 - 15:28 Uhr

Ich für meinen Teil sehe keinen Grund, das nicht stehen zu lassen. Serialisierung für Vergleiche zu nutzen, liegt ja relativ nahe, der Gedankengang ist meistens etwa so:

  • Vergleich von Hand zu schreiben nervt
  • Vergleich mit Reflection über die öffentlichen Member funktioniert
  • feststellen, dass beim Serialisieren auch mit Reflection die öffentlichen Member ausgewertet werden
    --> direkt Zurückgreifen auf Serialisierung

Die Idee haben wahrscheinlich die meisten Entwickler mal irgendwann 😉. Und im Normalfall geht das auch, der Teufel steckt nur leider im Detail. Ich finde es nicht verkehrt, den Teufel hier mal zu skizzieren und das auch im Forum zu lassen. Muss aber ein Admin entscheiden (eventuell verschieben?).

LaTino

06.01.2020 - 13:40 Uhr

Falls nicht klar ist, was ich meine, ein Beispiel. Es gibt, ohne zu übertreiben, Dutzende Möglichkeiten, Vergleiche über Serialisierung kaputtzumachen. Nicht empfehlenswert. Gäbe es eine generische Möglichkeit, komplexe Klassen zu vergleichen, bräuchte man IEquatable/IComparable nicht.


public class TestEquals
{
[Fact]
  public void TestEquals() 
  {
    Example expected = new Example {ExampleString = "example"};
    Example actual = new InheritedExample { ExampleString = "example" };
            
    Assert.True(expected.Equals(actual)); // Fehler.
    Assert.True(actual.Equals(expected)); // Fehler.
  }
}

public class InheritedExample : Example { [XmlIgnore] public override string ExampleString { get; set; } }

[XmlInclude(typeof(InheritedExample))]
public class Example 
{
  public virtual string ExampleString { get; set; }

  public bool Equals<T>(T value) 
  {
  /* ...snippet hier. */ 
  }
}

(EDIT: Zeilenumbrüche korrigiert)

06.01.2020 - 11:50 Uhr

Da der Vergleich auf Serialisierung basiert, wird er unter bestimmten Voraussetzungen fälschlich true liefern, obwohl die Objekte verschieden sind, oder umgekehrt.

LaTino

28.11.2019 - 08:01 Uhr

Eine Frage hätte ich noch.

Ich muss ja meine Daten an eine Webseite senden, dort habe ich folgende Möglichkeiten

  1. REST
  2. HTTP POST request mit XML Body
  3. SOAP (XML)

wäre da REST auch die beste / zukunftssicherste Lösung?

Zukunftssicher ist in dem Bereich relativ. Ich werf mal als Begriff noch gRPC in den Ring.

(Im übrigen gilt, was emuuu gesagt hat.)

LaTino

06.11.2019 - 07:55 Uhr

Es ist dein Vertrag. Wieso vermutest du, um was es sich handelt? Wenn es irgendwer wissen sollte, dann doch wohl du.

http://login.ionos.de anmelden
https://mein.ionos.de/subscriptions

Dort kannst du auch ggf die Daten und Anleitungen für dein Webhosting finden. Ionos' Kundenservice ist (zumindest meiner Erfahrung nach) überraschend gut, die werden dir eher weiter helfen können als ein C#-Forum. Dein Problem liegt ja nicht direkt an C# 😉.

LaTino

04.11.2019 - 08:04 Uhr

Da ich selber einiges bei Ionos hoste, kurze Rückfrage:

Ich habe die Domain von 1&1

Was genau hast du von Ionos? Nur die Domain? Managed Server? Dieses (mir etwas schräg vorkommende) "Webhosting"-Angebot?

LaTino

04.11.2019 - 07:57 Uhr

Bitte noch einmal deutlicher werden. Zumindest für mich ist nicht klar, was du eigentlich erreichen möchtest. Wo können mehr als zwei Werte "drinne" sein? Wieso ist Widerstandgesamt nicht die Summe der Widerstände in der Liste, sondern nur die Summe aus zwei sich offenbar ändernden (?) Werten?

Geh bitte davon aus, dass wir weder deine Aufgabenstellung noch dein konkretes Problem kennen.

LaTino

15.10.2019 - 07:56 Uhr

Das ist so eine typische Aufgabe, die nur der Selbstbefriedigung des Fragenden dient. Wer so etwas mal in einer Bewerbungssituation bekommt, sollte aufstehen und gehen.

Zur Frage: dein Bekannter hat den Logiktest bestanden. Er hat damit die Voraussetzungen, die der Ersteller des Einstellungstests fordert, um ihn zum Anwendungsentwickler auszubilden. Er soll den Test noch einmal nach zwei Jahren Ausbildung machen. Wenn er dann schlechter abschneidet, kann er anfangen, sich Sorgen zu machen. Bis dahin: Aufgabe bestanden, nächste Aufgabe bitte (also die Ausbildung).

Und sonst: Wenn alle überdurchschnittlich wären, wäre es keiner mehr.

LaTino

17.09.2019 - 14:24 Uhr

Ich ignoriere die, äh, unkonventionelle Bezeichnung "Nebenklasse" und "Hauptklasse" und fasse mal zusammen:

du hast drei voneinander unabhängige Klassen, die jeweils etwas mit einem Objekt des Typs "Bus" machen. Außerdem hast du noch eine Kontextklasse, die diese drei Klassen orchestriert (i.e. aufruft und die Reihenfolge der Aufrufe und damit das Ergebnis bestimmt).

Der Kontext braucht also Referenzen auf jede der benutzten Klassen. Soweit alles richtig bei dir.
Allerdings müssen die drei benutzten Klassen auch die Klasse "Bus" kennen. Die definierst du allerdings im Kontext, von dem die DLL_* nix wissen.

Nebenbei bemerkt, ist die Nutzung von "ref" in dem Kontext schlicht falsch, und auch die Benutzung von statischen Methoden willst du dir lieber abgewöhnen.

Also lieber so:


namespace Abstractions
{
   public class Bus 
  {
      public string Name { get; set; }
  }
}

namespace DLL_A 
{
  using Abstractions;
   public class Writer 
  {
      Write(Bus bus) { bus.Name = "Wert1"; }
  }
}
namespace DLL_B
{
  using Abstractions;
   public class ReadWriter
  {
      ReadWrite(Bus bus) { Console.WriteLine(bus.Name); bus.Name = "Wert2"; }
  }
}

namespace DLL_C
{
  using Abstractions;
   public class Reader
  {
      Read(Bus bus) { Console.WriteLine(bus.Name); }
  }
}

namespace Hauptprogramm
{
  using Abstractions;
  using DLL_A;
  using DLL_B;
  using DLL_C;
 
  public class Context 
  {
    public static void Main() 
    {
        Writer writer = new Writer();
        ReadWriter readWriter = new ReadWriter();
        Reader reader = new Reader();
        Bus myBus = new Bus();
        writer.Write(bus);
        readWriter.ReadWrite(bus);
        reader.Read(bus);
    }
  } 
}

Wobei mir generell nicht einleuchtet, wieso die Klassen alle in unterschiedlichen Namespaces sein müssen. Ich gehe aber mal davon aus, dass du dir dabei was gedacht hast.

LaTino

12.09.2019 - 08:03 Uhr

Übrigens ist bei deiner ursprünglichen Variante nicht die Speicherallokation teuer, sondern das kopieren der Strings, das notwendig ist, weil string nun einmal immutable ist.

LaTino

15.08.2019 - 07:01 Uhr

Du deklarierst die innere Zählvariable i außerhalb der äußeren Schleife. Wenn die innere Schleife also zum zweiten Mal durchlaufen werden soll, welchen Wert hat dann die innere Zählvariable? Wird die innere Schleife ein zweites Mal durchlaufen, wenn sie diesen Wert hat?

LaTino

06.06.2019 - 09:30 Uhr

Na okay 😄. Abgesehen davon ist XSLT hier angezeigt, denke ich. Kommt ohne Code, ohne Kompilieren und ohne sonstigen Quatsch aus und ist in jedem Texteditor in wenigen Minuten zu machen.

LaTino

06.06.2019 - 07:53 Uhr

Das Topic sagt wortwörtlich "Transformation von XML-Inhalten". Für sowas gibt's XML-Transformationen (sic!). Also: XSLT. Das Gestochere mittels XDocument/XmlDocument ist an der Stelle fehl am Platz.

LaTino

10.05.2019 - 09:47 Uhr

Das zu übergebende string-Array sind die zu validierenden Nummern. Steht so im Klartext in der WSDL, die du gepostet hast.

Das Problem liegt woanders. Ich habe den Service mal schnell ausprobiert, und bekam mit dem automatisch generierten Client immer eine Ausnahme "unerwarteter Inhalt in der Antwort". Bin neugierig geworden, hab Fiddler angeworfen, und siehe da: egal, wie der Request aussieht, der Service liefert stur eine HTTP-200-Nachricht (also: OK) ohne Inhalt. Egal, was man im Request stehen hat. Um sicher zu gehen, habe ich das ganze noch einmal mit SOAPUI nachvollzogen. Selbes Ergebnis.

https://ec.europa.eu/taxation_customs/dds2/eos/news/newstar.jsp?Lang=en

Da ist eine Mailadresse. Schreib denen.

LaTino

10.05.2019 - 09:18 Uhr

Punkt 1: nie kündigen, wenn man nicht bereits den neuen Job in der Tasche hat. Keine Ausnahmen.

Punkt 2: sechs Monate halte ich für gewagt. Ich befinde mich gerade in den letzten 4 Wochen, bevor ich den Job wechsle, und habe die drei Monate Kündigungsfrist benutzt, um Projekte abzuschließen, Dokumentation zu schreiben und Mitarbeiter zu schulen. Ich habe die drei Monate auch im Bewerbungsgespräch als nicht verhandelbar präsentiert, und das kam sehr gut an.

Arbeitgeber neigen dazu, Mitarbeiter zu mögen, die keine "nach mir die Sintflut"-Mentalität haben. Auf der anderen Seite planen Arbeitgeber auch gern, und ein halbes Jahr ohne Aussicht auf Besserung mit zu wenig Leuten arbeiten zu müssen, ist sicherlich nicht das Ideal.

Punkt 3: wenn eine Firma auch nach angemessener Frist dich nicht ersetzen kann (der Arbeitsmarkt ist nun mal leer), so ist das nicht deine Schuld und auch nicht dein Problem. Vielmehr sollte der Arbeitgeber mal überlegen, ob er eine langfristige Strategie zur Mitarbeitergewinnung hat, ob das Wissen in seinem Betrieb gut genug verteilt ist oder ob es "unkündbare" Wisseninseln gibt, und ob er wirklich genug Mitarbeiter hat. Wenn ich mich an mein BWL richtig erinnere, braucht man Pi mal Daumen 30% mehr Mitarbeiter als man eigentlich an Stellen hat (Urlaub, Krankheit, Einarbeitung...). Jedenfalls ist das Managementversagen und sollte nicht auf dem Rücken des kündigungswilligen Mitarbeiter kompensiert werden, wie das bei Palladin007 offenbar war. Goodwill ist das eine, sich ausnutzen lassen das andere.

Langer Rede kurzer Sinn: die Kündigungsfrist sollte lang genug sein, offene Projekte zu beenden und seine Stelle bestmöglich zu übergeben, und kurz genug, um attraktiv für neue Arbeitgeber zu bleiben. Für mich gilt: 4 Wochen ist zu kurz, drei Monate (8-16 Wochen) okay, ein halbes Jahr zu lang.

LaTino

07.05.2019 - 08:01 Uhr

MrSparkle hat völlig Recht, wir können nur spekulieren. Wie du den Übeltäter findest, ist im oben verlinkten FAQ-Artikel erläutert. Kurzfassung:

(VS 2017 und höher)
Debuggen -> Fenster -> Ausnahmeeinstellungen (Strg+Alt+E)
Haken setzen zweite Checkbox von oben (Common Language Runtime Exceptions)
F5 und bis zur Ausnahme arbeiten -> VS hält an, sobald ein Fehler passiert
mit der Maus über die in Frage kommenden Elemente und schauen, was null ist, oder das Fenster "lokal" im Auge behalten

Zeitaufwand < 1 Minute. Der Debugger ist dein wichtigstes Werkzeug, beschäftige dich bitte damit.

LaTino

07.05.2019 - 07:51 Uhr

Tolle Arbeit. Muss auch mal gesagt werden.

LaTino

03.05.2019 - 13:54 Uhr

Es scheint als läge die Lösung darin die Objekte in der äußersten geschweiften Klammer zu erzeugen.

Nein, mit der Erzeugung hat das nichts zu tun. Du hast zwei unterschiedliche Arten von Variablen erzeugt. Im ersten Versuch - der mit dem Fehler - handelt es sich um eine lokale Variable. Diese ist nur innerhalb der Methode verfügbar, in der sie deklariert, erzeugt und gefüllt wurde.

Im zweiten Versuch jetzt hast du eine sogenannte Instanzvariable (auch: "Feld") erzeugt. Deine Klasse "Window1" hat jetzt zwei Felder "Marco" und "Thomas". Diese beiden Felder sind innerhalb der Klasse überall bekannt. Du kannst sie an jeder Stelle erzeugen (mit "new"). Eine übliche Stelle wäre der Konstruktor der Klasse, eine zweite übliche Stelle wäre dort, wo du es gemacht hast (gleich bei der Deklaration).

Instanzvariablen solltest du mit Zugriffsmodifikatoren versehen. Diese regeln, der alles auf sie zugreifen darf. "private" heisst: nur innerhalb der Klasse. Bei der Namensvergabe für private Felder wird häufig ein _ dem kleingeschriebenen Namen vorangestellt. Siehe auch [Artikel] C#: Richtlinien für die Namensvergabe .


public class Window1 : Window
{
    private Helden _marco;
    private Helden _tobias = new Helden();
    private Helden _robin; //nur Deklaration ("Bekanntmachung"), kein Erzeugen ("Instanziierung")

    public Window1() 
    {
         this._marco = new Helden(); //Variante über Konstruktor. "this" kann auch weggelassen werden, es zeigt an, dass es sich um Element der Klasse handelt.
         _marco.Alter = 40;
         _marco.Name = "Marco";
         _tobias.Alter = 20;
         _robin.Alter = 24; //Fehler: Robin wurde noch nicht erzeugt!
         _robin = new Helden();
    }
}

Das sind allerdings sehr grundlegende Grundlagen in der OOP, nicht einmal spezifisch für C#, sondern so (oder fast so) auch gültig in jeder anderen objektorientierten Hochsprache.

Wäre ein guter Zeitpunkt, um mal ein Buch zur Hand zu nehmen 😃.

LaTino

25.03.2019 - 11:25 Uhr

@MrSparkle, ah, okay. Mir war entgangen, dass im Grundlagenforum keine Grundlagen mehr diskutiert werden sollen. Entschuldigung.

LaTino

25.03.2019 - 07:56 Uhr

Das ist falsch.

List<T> benutzt an keiner Stelle Array.Resize. Die Quellen sind offen, es schadet nicht, sie zu prüfen, bevor man eine Behauptung aufstellt.

As elements are added to a List, the capacity of the List is automatically increased as required by reallocating the internal array.

(Hervorhebung von mir)

LaTino

12.03.2019 - 07:10 Uhr

Die Herangehensweise per yield verführt dazu, wenn man mehrere Ergebnislisten haben will, pro Ergebnisliste die Quell-Collection einmal zu durchlaufen, und sich damit die schönere Syntax mit schlechterer Performance zu erkaufen. (Ich meine: wenn man von dem Punkt, den Palladin007 gepostet hast, weiter macht bis zu einem Punkt, wo man n Ergebnislisten hat).

Von daher: bleib bei den Listen, dein geposteter Quellcode war völlig in Ordnung, wenn auch mit dem falschen Collection-Typ (Array).

LaTino

21.02.2019 - 08:55 Uhr

Weil es sich um ein Konzept handelt, das nicht ausreichend offensichtlich ist und deshalb gern und oft falsch implementiert wird, oder umgangen wird. Bestes Beispiel ist das Ursprungsposting hier.

Das Problem ist hier: MSDN: Using Settings in C# sogar schön festgehalten:

To Change the Value of a Setting Between Application Sessions

Using Microsoft Notepad or some other text or XML editor, open the <AssemblyName>.exe.config file associated with your application.

Locate the entry for the setting you want to change. It should look similar to the following example:

<setting name="Setting" serializeAs="String">
<value>This is the setting value</value>
</setting>
Type a new value for your setting and save the file.

Ich weiß nicht, in welchem Drogenrausch es jemals für eine gute Idee gehalten wurde, das für ein geeignetes Vorgehen zum Pflegen von Application Settings zu halten.

Ja, wenn man es so macht, kriegt man kein Problem.

Nein, in der Praxis macht das kaum einer (löbliche Ausnahmen gibt's, siehe VS). Was ich schon gesehen habe:

  • user privilege elevation (lies: "loggen Sie sich als Administrator ein, um diese Einstellung in dieser UI pflegen zu können")
  • Zugriffsrechte auf das Programmverzeichnis während der Installation für alle User gestatten
  • Konfigurationsmodell komplett umgehen
  • Installation eines WCF-Service in einem Windows-Dienst, der Schreibrechte im Installationsverzeichnis der Anwendung hat und die .config manipulieren kann, sowie die Anwendung nach Bedarf neu startet, eine net.tcp-Bindung hat von der Anwendung bedient wird *
    Gibt sicher noch mehr Varianten, und allesamt sind sie Müll. Keine davon ist sicher, alle davon resultieren aus dem Wunsch, Application Settings bequemer ändern zu können. Und die sind nur unbequem zu ändern, wenn sie im Installationsverzeichnis liegen.

Und deshalb halte ich das für eine beknacktes Design.

LaTino

  • Nein, das denke ich mir nicht aus.
20.02.2019 - 10:26 Uhr

Ich würde dir zustimmen, aber dann würden wir beide falsch liegen.

Es gibt keine Begründung, wieso ein Programm, das unter eingeschränkten Berechtigungen laufen können muss, Schreibrechte auf sein Installationsverzeichnis haben sollte. Wenn solche Rechte notwendig sind, handelt es sich um eine potenzielle Sicherheitslücke, die zB das nachträgliche Installieren von Programmen in C:\Programme gestatten würde.

Es ist gefährlicher Unsinn, ApplicationSettings im Installationspfad zu hinterlegen.

LaTino

19.02.2019 - 08:16 Uhr

Wenn Du aktuell die Idee hast, dass Du jede Technologie erlernen und vertiefen willst.. dann viel Glück dabei 😃
Wärst der Erste, der das packt 😃

Keineswegs 😉

Jack of all trades, master of none 😃.

Super einfach via Google zu finden 😉

Fast alles ist via Google zu finden. Dennoch als mal interessant, was andere Leute in Foren so denken 😉

Das Ziel ist mit beiden erreichbar. Vor- und Nachteile sind teils hochgradig subjektiv, teils von den vorhandenen Assets (Programmierer, Lizenzen, eigene Code-Bibliotheken aus Legacy-Code oder von anderen Projekten, Kundenwunsch) abhängig. Deshalb ist es Unsinn, die Meinungen dazu abzufragen. Im Haus hier wäre es völliger Käse, etwas mit Cordova anzufangen, nachdem wir ein gut geöltes Xamarin-Team haben, die wissen, was sie tun und mit Xamarin eine Menge Erfahrung haben. Daher bin ich der Meinung, dass Xamarin wesentlich besser ist als Cordova. Was genau nutzt dir das? Genau, nicht viel. Und deshalb hat Abt durchaus Recht, dich für eine Recherche an Google zu verweisen 😃.

LaTino

11.02.2019 - 07:29 Uhr

Bitte, bitte ArrayList nicht mehr verwenden. Die Klasse ist eigentlich seit der Einführung von generic collections vor 13 Jahren veraltet.

Kurzes Tutorial, das den Umstieg skizziert

Wenn du mit Hilfe von generics sichergestellt hast, dass alle Objekte in deiner Sammlung vom selben Typ sind, dann kannst du sie auch viel einfacher sortieren, indem du nur noch angibst, wie zwei Elemente dieses Typs zu vergleichen sind. Für solche Vergleiche gibt es auch schon eine Vorgabe: Comparison<T>. Damit benutzt du dann die Sort(Comparison<T>)-Methode deiner generischen Liste.

LaTino