Basierend auf der Idee von @picoflop mit seiner NTHLibrary, hier eine, die ich derzeit entwickle.
NTH-Library
Ziel dieser Library ist es, kleine, aber oft notwendige Funktionen, die nicht im .NET Framework enthalten sind, nachzurüsten. Dabei handelt es sich nicht nur um Extension Methods, sondern auch im ganze Klassen. Welche da u. A. zusammen kommen, kannst du bei den Samples sehen. Das NTH steht für Nice-To-Have.
Diese NTH-Library ist vorerst unabhängig vom UI (WinForms, WPF), um so wenig Abhängigkeiten wie möglich zu haben. Ich spiele aber mit dem Gedanken, jeweils eine für WinForms und WPF zu machen. Bei letzterem weiß ich aber noch überhaupt nicht, was da rein kommen könnte.
Zusatzklassen wie z. B. die MathEx sollen die Framework-Klassen nicht ersetzen, sondern ergänzen.
Samples
Levenshtein-Distanz
MathEx
CommandLine-Klasse
ByteSize-Klasse
Misc Extensions
Die Library kann noch mehr. Einfach mal durch den Code browsen.
U. A. nicht in den Samples gezeigt:
- Generisches Diffing
- BigEndianBinaryReader/-Writer
- Crc32
- Formatter für Byte-Sizes (basierend auf WinAPI)
- Verschiedene Levenshtein-Implementierungen
Weitere Samples folgen!
Download
NuGet:
Kompilierte Versionen auf GitHub:
Für .NET 4.0
4.5er-Version kommt bald, aber die 4.0er Version funktioniert dafür ja auch. Ob ich noch was für <4.0 mache, weiß ich noch nicht. Wenn Du aber das Bedürfnis danach hast, kannst du das gerne machen.
Source Code auf GitHub:
github.com/nikeee/nth
Voraussetzungen:
- .NET 4.X (Client-Profile-Version nun verfügbar)
Work In Progress:
- CodeContracts-Support
- XML-Dokumentation und Online-Doku-Browser
- Weitere Funktionen
Projektstatus
Dieses Projekt ist nicht fertig. Es fehlen noch einige Unittests sowie sehr viel Dokumentation. Du kannst mir dort gerne Abhilfe schaffen!
Open Source!
Diese Library ist Open Source (eine Lizenz muss ich noch aussuchen, vorerst gilt die GPLv3). Es wird aber gerne gesehen, wenn du selbst etwas zu dieser Library beiträgst! Einfach forken, etwas dazucoden/fixen und Pull-Request stellen.
Wenn Ihr Inspirationen habt, immer her damit! :)
NTH-Library
Ziel dieser Library ist es, kleine, aber oft notwendige Funktionen, die nicht im .NET Framework enthalten sind, nachzurüsten. Dabei handelt es sich nicht nur um Extension Methods, sondern auch im ganze Klassen. Welche da u. A. zusammen kommen, kannst du bei den Samples sehen. Das NTH steht für Nice-To-Have.
Diese NTH-Library ist vorerst unabhängig vom UI (WinForms, WPF), um so wenig Abhängigkeiten wie möglich zu haben. Ich spiele aber mit dem Gedanken, jeweils eine für WinForms und WPF zu machen. Bei letzterem weiß ich aber noch überhaupt nicht, was da rein kommen könnte.
Zusatzklassen wie z. B. die MathEx sollen die Framework-Klassen nicht ersetzen, sondern ergänzen.
Samples
C#-Quellcode
- string a = "tier";
- string b = "tor";
- var dist = a.LevenshteinDistanceTo(b);
- Console.WriteLine(dist); // 2
- // Sortierung:
- var dictionary = new[] {
- "bier",
- "bitte",
- "bitter",
- "besen"
- };
- var input = "biete";
- var bestMatch = dictionary.OrderByLevenshteinDistanceTo(input).FirstOrDefault();
- Console.WriteLine("Did you mean " + bestMatch + "?"); // Did you mean bitte?
C#-Quellcode
- // Math.Pow() ist leider nur für floats
- int @base = 2;
- int exponent = 4;
- int result = MathEx.Pow(@base, exponent); // wenn base == 2, dann wird bitshifting verwendet
- // Negative exponenten sind pauschal nicht möglich, da das Ergebnis nicht immer vernünftig in einen int/long passt.
- // ebenfalls für long verfügbar
C#-Quellcode
- var newCommandLine = new CommandLine(@"C:\Demo.exe");
- newCommandLine.Arguments.Add("-n");
- newCommandLine.Arguments.Add("Some argument"); // wird automatisch in quotes gesetzt
- // Starte demo.exe mit folgender kommandozeile:
- // C:\Demo.exe -n "Some argument"
- ProcessEx.Start(newCommandLine);
- string commandLineString = newCommandLine.ToString();
- Console.WriteLine("Spawned process using command line:");
- Console.WriteLine(commandLineString);
- var parsedCommandLine = CommandLine.Parse(commandLineString); // Es gibt auch eine Parse-Funktion
- Console.WriteLine("Current arguments:");
- var currentExecutable = CommandLine.Current.FilePath; // CommandLine.Current gibt das Kommandozeilenobjekt zum aktuellen Prozess zurück
- foreach(var arg in CommandLine.Current.Arguments)
- Console.WriteLine(arg);
C#-Quellcode
- var fileByteCount = new FileInfo(Assembly.GetEntryAssembly().Location).Length; // z. B. 5120
- //fileByteCount ist eine Anzahl an bytes.
- var fs = new ByteSize(fileByteCount);
- Console.WriteLine(fs.ToString()); // 5 KiB
- fs++; // um einen Byte inkrementieren
- Console.WriteLine("Exact bytes: " + fs.ByteCount);
- fs += new ByteSize(1, BytePrefix.MibiByte); // + 1MiB
- var twoGigabyte = new ByteSize(2, BytePrefix.GigaByte); // 2GB (nicht GiB)
- bool areEqual = fs == twoGigabyte; // sind die 2 Byte-Grössen gleich groß?
C#-Quellcode
- var pointer = new IntPtr(0xABCD);
- var str = pointer.ToHexString(); // "0x0000ABCD" bei 32-Bit, bei 64-Bit "0x000000000000ABCD"
- // der Präfix (0x) ist via Parameter ausstellbar.
- // Das Padding ist abhängig von der Architektur der laufenden Anwendung, kann aber via Parameter angepasst werden.
- // ähnliche Extension gibt es für Int32
C#-Quellcode
- [StructLayout(LayoutKind.Explicit)]
- struct SomeStruct
- {
- [FieldOffset(0)]
- public byte Field1;
- [FieldOffset(1)]
- public int Field2;
- [FieldOffset(5)]
- public float Field3;
- }
- // sizeof(SomeStruct) == 1 + 4 + 4 == 9 byte
- byte[] blobData = new byte[] {1, 2, 3, 4, 5, 6, 7, 8, 9};
- SomeStruct instance = blobData.ConvertToStruct<SomeStruct>();
- // aus dem Byte-Array wurde eine Struct-Instanz erstellt (basierend auf den Offsets usw). Nützlich beim Interop mit nativen structs/buffern
- byte b = instance.Field1; // == 1
- int c = instance.Field2; // == 0x05040302 (weil Little Endian und so)
Die Library kann noch mehr. Einfach mal durch den Code browsen.
U. A. nicht in den Samples gezeigt:
- Generisches Diffing
- BigEndianBinaryReader/-Writer
- Crc32
- Formatter für Byte-Sizes (basierend auf WinAPI)
- Verschiedene Levenshtein-Implementierungen
Weitere Samples folgen!
Download
NuGet:
PM> Install-Package NTH
Kompilierte Versionen auf GitHub:
Für .NET 4.0
4.5er-Version kommt bald, aber die 4.0er Version funktioniert dafür ja auch. Ob ich noch was für <4.0 mache, weiß ich noch nicht. Wenn Du aber das Bedürfnis danach hast, kannst du das gerne machen.
Source Code auf GitHub:
github.com/nikeee/nth
Voraussetzungen:
- .NET 4.X (Client-Profile-Version nun verfügbar)
Work In Progress:
- CodeContracts-Support
- XML-Dokumentation und Online-Doku-Browser
- Weitere Funktionen
Projektstatus
Dieses Projekt ist nicht fertig. Es fehlen noch einige Unittests sowie sehr viel Dokumentation. Du kannst mir dort gerne Abhilfe schaffen!
Open Source!
Diese Library ist Open Source (eine Lizenz muss ich noch aussuchen, vorerst gilt die GPLv3). Es wird aber gerne gesehen, wenn du selbst etwas zu dieser Library beiträgst! Einfach forken, etwas dazucoden/fixen und Pull-Request stellen.
Wenn Ihr Inspirationen habt, immer her damit! :)
Von meinem iPhone gesendet
Dieser Beitrag wurde bereits 9 mal editiert, zuletzt von „nikeee13“ ()