Okay, die Grundidee, die ich versuche zu tun, besteht darin, Byte-Array in etwas wie short oder int usw. umzuwandeln.
Ein einfaches Beispiel könnte sein:
%Vor%Okay, was ich wirklich versuche, ist eine Erweiterung der Stream-Klasse. erweiterte Lese- und Schreibmethoden. Ich brauche Hilfe bei dem folgenden Code:
%Vor%Ich habe das Gefühl, dass ich Zeiger für die Geschwindigkeit verwenden muss, weil ich daran arbeiten werde, Daten aus Streams wie NetworkStream-Klassen zu schreiben und zu lesen. Danke für Ihre Hilfe!
BEARBEITEN:
Und während ich versuche, herauszufinden, wie ich T-Arrays zurückgeben kann, habe ich mit diesem Problem konfrontiert:
%Vor%DIE ZUSAMMENFASSUNG: Ich muss von Byte-Array zu gegebenem Typ von T konvertieren ODER zu gegebenem Typ von T-Array mit gegebener Länge
Sie können diese Funktion aufgrund von Zeigereinschränkungen in C # nicht generisch machen. Jeder der folgenden Typen kann ein Zeigertyp sein:
Sie können jedoch keine Einschränkung für T where T <can be pointer type>
festlegen. where T : struct
ist sehr nah, aber nicht genug, weil benutzerdefinierte Strukturen Felder von Referenztypen enthalten können.
Es gibt eine Problemumgehung - System.Runtime.InteropServices.Marshal.PtrToStructure()
(es löst einfach eine Ausnahme aus, wenn es nicht mit dem angegebenen Objekttyp arbeiten kann), aber es würde auch alle erreichten Leistungsverbesserungen ausschalten.
Ich denke, der einzige Weg, dies zu tun, ist das Erstellen von nicht-generischen Funktionen für alle gewünschten Typen.
Ich spring ein bisschen spät auf dieses Thema mit einer Antwort, die auf eine Sprachergänzung wartet, aber einer der Champions Für C # 7.3 muss eine Bedingung für nicht verwalteten Typ hinzugefügt werden.
Mit der Einschränkung für den nicht verwalteten Typ können Sie unter anderem generische Zeiger ( T*
) verwenden.
Damit können Sie T
als nicht verwalteten / blitbaren Typ deklarieren, und Ihre generischen Methoden sollten funktionieren ... (Nun, ich nehme an, Sie sind ein bisschen darüber hinaus Problem fast 6 Jahre später, aber hoffentlich hilft es jemand anderem vorwärts)
Daumen drücken!
Tags und Links c#