Zum Inhalt springen

NerdonRails

Mitglieder
  • Gesamte Inhalte

    71
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von NerdonRails

  1. Ups, überlesen, verdammter Schlafmangel. Die Exceptions-Lösung ist aber im gegensatz zu irgendwelchen selbstverwalteten Listen und komischen selbstgefrickelten Validierungen die eleganteste und sicherste Lösung und ist sicher in Sachen Speicher (wovon man im Zeitalter von 1 GB+ RAM mehr als genug haben sollte) die effizienteste Lösung. Zusätzlich dupliziert man einfach keinen Code der so schon in der Sprache vorhanden ist.
  2. Ich verstehe das Problem nicht. DateTime wirft bei invaliden Daten doch ArgumentOutOfRangeExceptions. [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void TestThatLeapYearsAreAutomaticallyChecked() { DateTime dt = new DateTime(2010, 2, 29); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void TestThatInvalidDatesThrowAnException() { DateTime dt = new DateTime(2010, 12, 32); } Da sollte ein einfaches Try-Catch beim erstellen eines neuen DateTime.Objektes doch eigentlich reichen, oder irre ich da ?
  3. NerdonRails

    [C#] WPF DataGrid

    Ich meinte nicht das Design im Frontend. Ich meinte das die Lösung, sollte man MVVM nutzen und es konsequent durchsetzen wollen, evtl. dazu führen kann das View-Bezogener Kram, z.B. UserControl-Referenzen, wenn man nicht aufpasst im ViewModel landen kann => hässlich, weil es die Kapselung verletzen könnte.
  4. NerdonRails

    [C#] WPF DataGrid

    Evtl. gehts so: <sdk:DataGridTemplateColumn Header="SomeContent"> <sdk:DataGridTemplateColumn.CellTemplate> <DataTemplate> <ContentControl x:Name="Test" ></ContentControl> </DataTemplate> </sdk:DataGridTemplateColumn.CellTemplate> </sdk:DataGridTemplateColumn> Dem Content-Control kann man soweit ichs noch im Kopf habe UserControls zuweisen. Wenn du MVVM benutzen willst, kann das aber zu extrem hässlichen Lösungen führen.
  5. Guter Mann. RhinoMocks ist wirklich ziemlich gut, besonders wenn es um das testen State-behafteter Klassen geht oder um Klassen die einfach nur mies zum Testen sind bzw. wo das drüberliegende Framework einfach testunfreundlich designed wurde (z.B. LinqToSql oder EntityFramework, wobei das EF dank POCO und Mocking-Framework doch testbar ist). Wenns nichts großes ist kann man auch mit dem Strategie-Pattern und DependencyInjection arbeiten und kann sich das Mocking-Framework sparen
  6. NerdonRails

    [C#] String.Split

    String url = "http://www.youtube.com/"; String result = "http://www.youtube.com/watch?v=kLwrdp8RV5A".Substring(url.length);
  7. Nur eine Angewohnheit, alles so präzise zu benennen wie möglich. IProcessor könnte auch noch von anderen Klassen implementiert werden, wodurch beim lesen des Codes evtl. nicht mehr der eigentliche Sinn heraus kommt. Ihr wisst schon was ich meine. Ausserdem könnte man in ICountingProcessor noch weitere, spezifische Methoden-Signaturen definieren die in IProcessor nichts zu suchen hätten.
  8. Hier noch ein etwas anderer Ansatz: public interface IProcessor<ResultType> { ResultType Process(String current, Char charToProcess); } public interface ICountingProcessor : IProcessor<Int32> { } public class CountingProcessor : ICountingProcessor { public Int32 Process(String current, Char charToProcess) { Int32 index = 0; Char currentChar = current[index]; while (currentChar == charToProcess) { index++; currentChar = current[index]; } return index; } } public interface IStringProcessor { String ReplaceFromStartUntil(Char charToReplace, Char replaceWith); String RemoveFirstOccurencesOf(Char charToRemove); } public class StringProcessor : IStringProcessor { // Properties private String StringToProcess { get; set; } private ICountingProcessor CountingProcessor { get; set; } // Constructors public StringProcessor(String stringToProcess) { this.StringToProcess = stringToProcess; this.CountingProcessor = new CountingProcessor(); } // Methods public String ReplaceFromStartUntil(Char charToReplace, Char replaceWith) { Int32 numberOfCharsToSnip = this.CountingProcessor.Process(this.StringToProcess, charToReplace); return this.StringToProcess.Substring(numberOfCharsToSnip).PadLeft(this.StringToProcess.Length, replaceWith); } public string RemoveFirstOccurencesOf(Char charToRemove) { Int32 numberOfCharsToSnip = this.CountingProcessor.Process(this.StringToProcess, charToRemove); return this.StringToProcess.Substring(numberOfCharsToSnip); } } Und natürlich Tests die das ganz belegen: [TestMethod] public void TestThatACountingProcessorCountsTheAppearancesOfACharacterUntilAnotherCharacterApears() { String dummyData = "000107"; Int32 expected = 3; Int32 actual; IProcessor<Int32> countingProcessor = new CountingProcessor(); actual = countingProcessor.Process(dummyData, '0'); Assert.IsTrue(actual == expected); } [TestMethod] public void TestThatStartingZerosAreReplacedWithCustomCharacterByAStringProcessor() { String actual = "00107"; String expected = " 107"; IStringProcessor processor = new StringProcessor(actual); Assert.IsTrue(processor.ReplaceFromStartUntil('0', ' ') == expected); actual = "00010"; processor = new StringProcessor(actual); expected = " 10"; Assert.IsTrue(actual.ReplaceFromStartUntil('0', ' ') == expected); } [TestMethod] public void TestThatAStringWithoutOccurencesIsNotModifiedByAStringProcessor() { String actual = "12345"; String expected = "12345"; IStringProcessor processor = new StringProcessor(actual); Assert.IsTrue(processor.ReplaceFromStartUntil('0', ' ') == expected); } [TestMethod] public void TestThatTheFirstOccurencesOfACharAreRemovedFromAStringByAStringProcessor() { String actual = "000107"; String expected = "107"; IStringProcessor processor = new StringProcessor(actual); Assert.IsTrue(processor.RemoveFirstOccurencesOf('0') == expected); } Das dürfte ein recht sauberer Ansatz sein, der auch recht erweiterbar ist.
  9. Naja, ist am elegantesten wenn man nicht gleich wieder eine komplette Objekthierarchie aufbauen möchte. Und sooo viel Voodoo sind Extension-Methods nun auch wieder nicht.
  10. Hier ein Lösungsansatz: public static class StringExtensions { public static String ReplaceFromStartUntil(this String current, Char charToReplace, Char replaceWith) { return current.Substring(current.GetCharCountUntilOtherCharAppears(charToReplace)).PadLeft(current.Length, replaceWith); } public static String RemoveFirstOccurencesOf(this String current, Char charToRemove) { return current.Substring(current.GetCharCountUntilOtherCharAppears(charToRemove)); } private static Int32 GetCharCountUntilOtherCharAppears(this String current, Char charToCount) { Int32 index = 0; Char currentChar = current[index]; while (currentChar == charToCount) { index++; currentChar = current[index]; } return index; } } Und hier die Tests die belegen das das ganze auch fuppt: [TestClass] public class UnitTest1 { [TestMethod] public void TestThatStartingZerosAreReplacedWithCustomCharacter() { String actual = "00107"; String expected = " 107"; Assert.IsTrue(actual.ReplaceFromStartUntil('0', ' ') == expected); actual = "00010"; expected = " 10"; Assert.IsTrue(actual.ReplaceFromStartUntil('0', ' ') == expected); } [TestMethod] public void TestThatAStringWithoutOccurencesIsNotModified() { String actual = "12345"; String expected = "12345"; Assert.IsTrue(actual.ReplaceFromStartUntil('0', ' ') == expected); } [TestMethod] public void TestThatTheFirstOccurencesOfACharAreRemovedFromAString() { String actual = "000107"; String expected = "107"; Assert.IsTrue(actual.RemoveFirstOccurencesOf('0') == expected); } }
  11. Bist du sicher, das du die Methode zum Schreiben auch aufrufst ?
  12. Das gilt aber nur für Soap-Services. Z.B. JSON- oder reine XML-Services wirst du damit nicht konsumieren können. Darüber sollte aber die Schnittstellen-Spezifikation auskunft geben können.
  13. Naja, da kann man einfach einen naive Gegenfrage stellen: Wann war Vorwissen jemals nicht von Vorteil ?
  14. NerdonRails

    Json - Daten auslesen

    MVC: Controller-Action die ein Json-Result-Object zurückgibt ASP.NET: JsonTextWriter-Class, bekommt man bei: Json.NET
  15. wenn das über ein asp-control läuft, kann man einfach im code-behind z.B. {ControlId}.SelectedValue benutzen. ASP mapped die Controls über die .designer.cs mit benutzbaren Objekten im Code-Behind.
  16. <select name="Dropdownlist1" id="Dropdownlist1" runat="server"> Im Code-Behind i.e.: Dropdownlist1.SelectedValue
  17. Ich habe als Abschlussprojekt ein Dependency-Injection / IoC-Framework geschrieben. Gefragt wurde ich 15 Minuten lang alles über Polymorphie und einige Fragen mein Projekt spezifisch betreffend.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...