Array-Analyse mit einer Untergrenze ungleich Null in C#
Wenn man über Arrays spricht und gefragt wird, bei welcher Zahl das Array beginnt, werden die meisten Programmierer schätzungsweise direkt sagen, dass das Array mit Sicherheit bei 0 beginnt. Diese Antwort ist natürlich richtig. Schauen wir uns nun Arrays mit einer Untergrenze ungleich Null in C# an.
Werfen wir zunächst einen Blick auf die entsprechende Einführung zu Arrays:
1. Array: Dabei handelt es sich um einen Mechanismus, der die Verarbeitung mehrerer Datenelemente als Sammlung ermöglicht.
2. Klassifizierung von Arrays: In CLR können Arrays in eindimensionale Arrays, mehrdimensionale Arrays und verschachtelte Arrays unterteilt werden.
3. Array-Typ: Da alle Arrays vom abstrakten Typ System.Array erben und dieser Typ von System.Object erbt, bedeutet dies, dass das Array ein Referenztyp ist.
Beim Erstellen eines Arrays enthält der vom Array-Objekt belegte Speicherblock zusätzlich zu den Array-Elementen auch einen Typobjektzeiger, einen synchronisierten Indexblock und ein zusätzliches Mitglied. Die oben erwähnte Klassifizierung von Arrays ist „verschachtelte Arrays“. Da die CLR verschachtelte Arrays unterstützt, können verschachtelte Arrays in C# implementiert werden. Der Zugriff auf die Elemente eines verschachtelten Arrays muss zweimal erfolgen . Oder mehrere Array-Zugriffe.
Wenn das Array während der zugehörigen Operationen am Array als tatsächlicher Parameter an eine Methode übergeben wird, wird tatsächlich ein Verweis auf das Array übergeben, sodass die aufgerufene Methode die Elemente im Array ändern kann. (Wenn Sie nicht geändert werden möchten, müssen Sie eine Kopie des Arrays generieren und diese Kopie an die Methode übergeben.)
Hier ist eine Methode zum Konvertieren eines Arrays in eine DataTable:
/// <summary> /// 整数型二维数组转换成DataTable /// </summary> /// <param name="intDyadicArray"></param> /// <param name="messageOut"></param> /// <param name="dataTableColumnsName"></param> /// <returns></returns> public DataTable DyadicArrayToDataTable(int[,] intDyadicArray, out string messageOut, params object[] dataTableColumnsName) { var returnDataTable = new DataTable(); //验证列与所传入的字符是否相符 if (dataTableColumnsName.Length != intDyadicArray.GetLength(1)) { messageOut = "DataTable列数与二维数组列数不符,请调整列数"; return returnDataTable; } //添加列 for (var dataTableColumnsCount = 0; dataTableColumnsCount < dataTableColumnsName.Length; dataTableColumnsCount++) { returnDataTable.Columns.Add(dataTableColumnsName[dataTableColumnsCount].ToString()); } //添加行 for (var dyadicArrayRow = 0; dyadicArrayRow < intDyadicArray.GetLength(0); dyadicArrayRow++) { var addDataRow = returnDataTable.NewRow(); for (var dyadicArrayColumns = 0; dyadicArrayColumns < intDyadicArray.GetLength(1); dyadicArrayColumns++) { addDataRow[dataTableColumnsName[dyadicArrayColumns].ToString()] = intDyadicArray[dyadicArrayRow, dyadicArrayColumns]; } returnDataTable.Rows.Add(addDataRow); } //返回提示与DataTable messageOut = "DataTable成功转换"; return returnDataTable; }
Oben Es handelt sich um eine Operationsmethode zum Konvertieren eines Integer-Arrays in eine Datentabelle. Für die Konvertierung anderer Typen wie Bytes, Gleitkomma und anderer Typen müssen Sie lediglich die entsprechenden Parameter ändern Entsprechende Typen werde ich hier nicht näher vorstellen.
Schauen wir uns als Nächstes das relevante Wissen zum „Untergrenzen-Nicht-Null-Array“ genauer an:
Da das Untergrenzen-Nicht-Null-Array hinsichtlich der Leistung nicht besser optimiert wurde , es wird im Allgemeinen nicht verwendet. Wenn Ihnen der Leistungsverlust egal ist oder Sie eine sprachübergreifende Portierung benötigen, können Sie die Verwendung eines Arrays ungleich Null in Betracht ziehen. Das Konzept des „Untergrenzen-Nicht-Null-Arrays“ wird nicht eingeführt, wie der Name schon sagt.
Verwenden Sie zum Erstellen in C# die Methode CreateInstance() von Array. Diese Methode verfügt über mehrere Überladungen, mit denen Sie den Array-Elementtyp, die Array-Dimension, die Untergrenze jeder Dimension und die Anzahl der Elemente in jeder Dimension angeben können.
Wenn Sie CreateInstance() aufrufen, weisen Sie dem Array Speicher zu, speichern Sie die Parameterinformationen im Overhead-Teil des Array-Speichers und geben Sie dann einen Verweis auf das Array zurück.
Als nächstes werfen wir einen Blick auf den zugrunde liegenden Implementierungscode dieser Methode:
[System.Security.SecuritySafeCritical] // auto-generated public unsafe static Array CreateInstance(Type elementType, int length) { if ((object)elementType == null) throw new ArgumentNullException("elementType"); if (length < 0) throw new ArgumentOutOfRangeException("length", Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum")); Contract.Ensures(Contract.Result<Array>() != null); Contract.Ensures(Contract.Result<Array>().Length == length); Contract.Ensures(Contract.Result<Array>().Rank == 1); Contract.EndContractBlock(); RuntimeType t = elementType.UnderlyingSystemType as RuntimeType; if (t == null) throw new ArgumentException(Environment.GetResourceString("Arg_MustBeType"),"elementType"); return InternalCreate((void*)t.TypeHandle.Value,1,&length,null); }
Nachdem Sie den obigen Code gesehen haben, sollten Sie ein allgemeines Verständnis für die Erstellung einer Basis ungleich Null haben Werfen wir einen genaueren Blick auf den zugrunde liegenden Code der Consideres()-Methode:
public static void Ensures(bool condition) { AssertMustUseRewriter(ContractFailureKind.Postcondition, "Ensures"); }
[SecuritySafeCritical] static partial void AssertMustUseRewriter(ContractFailureKind kind, String contractKind) { if (_assertingMustUseRewriter) System.Diagnostics.Assert.Fail("Asserting that we must use the rewriter went reentrant.", "Didn't rewrite this mscorlib?"); _assertingMustUseRewriter = true; Assembly thisAssembly = typeof(Contract).Assembly; StackTrace stack = new StackTrace(); Assembly probablyNotRewritten = null; for (int i = 0; i < stack.FrameCount; i++) { Assembly caller = stack.GetFrame(i).GetMethod().DeclaringType.Assembly; if (caller != thisAssembly) { probablyNotRewritten = caller; break; } } if (probablyNotRewritten == null) probablyNotRewritten = thisAssembly; String simpleName = probablyNotRewritten.GetName().Name; System.Runtime.CompilerServices.ContractHelper.TriggerFailure(kind, Environment.GetResourceString("MustUseCCRewrite", contractKind, simpleName), null, null, null); _assertingMustUseRewriter = false; }
Es gibt keine ausführliche Einführung in die Erstellungsmethode eines Nicht-Null-Basisarrays Um es zu verwenden, können Sie die entsprechende Version entsprechend der bereitgestellten Methodenüberladung auswählen.

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Die Nutzungsmethoden von Symbolen in der C-Sprachabdeckung Arithmetik, Zuordnung, Bedingungen, Logik, Bitoperatoren usw. werden für grundlegende mathematische Operationen verwendet, Zuordnungsoperatoren werden zur Zuordnung und Addition verwendet, Subtraktion, Multiplikationszuordnung und Abteilungszuweisung, Zustandsbetreiber werden für Unterschiede verwendet. Logische Operationen werden verwendet. Logische Operationen werden verwendet. Logische Operationen werden verwendet. Zeiger, Markierungen am Ende der Datei und nicht numerische Werte.

Der Unterschied zwischen Multithreading und Asynchron besteht darin, dass Multithreading gleichzeitig mehrere Threads ausführt, während asynchron Operationen ausführt, ohne den aktuellen Thread zu blockieren. Multithreading wird für rechenintensive Aufgaben verwendet, während asynchron für die Benutzerinteraktion verwendet wird. Der Vorteil des Multi-Threading besteht darin, die Rechenleistung zu verbessern, während der Vorteil von Asynchron nicht darin besteht, UI-Threads zu blockieren. Die Auswahl von Multithreading oder Asynchron ist von der Art der Aufgabe abhängt: Berechnungsintensive Aufgaben verwenden Multithreading, Aufgaben, die mit externen Ressourcen interagieren und die UI-Reaktionsfähigkeit asynchron verwenden müssen.

In C wird der Zeichenentyp in Saiten verwendet: 1. Speichern Sie ein einzelnes Zeichen; 2. Verwenden Sie ein Array, um eine Zeichenfolge darzustellen und mit einem Null -Terminator zu enden. 3. Durch eine Saitenbetriebsfunktion arbeiten; 4. Lesen oder geben Sie eine Zeichenfolge von der Tastatur aus.

Das Char -Array speichert Zeichensequenzen in der C -Sprache und wird als char Array_name [Größe] deklariert. Das Zugriffselement wird durch den Einweisoperator weitergeleitet, und das Element endet mit dem Null -Terminator '\ 0', der den Endpunkt der Zeichenfolge darstellt. Die C -Sprache bietet eine Vielzahl von String -Manipulationsfunktionen wie Strlen (), Strcpy (), Strcat () und strcmp ().

In der C -Sprache werden Sonderzeichen durch Escape -Sequenzen verarbeitet, wie z. B.: \ n repräsentiert Linienbrüche. \ t bedeutet tab charakter. Verwenden Sie Escape -Sequenzen oder Zeichenkonstanten, um Sonderzeichen darzustellen, wie z. B. char c = '\ n'. Beachten Sie, dass der Backslash zweimal entkommen muss. Verschiedene Plattformen und Compiler haben möglicherweise unterschiedliche Fluchtsequenzen. Bitte wenden Sie sich an die Dokumentation.

In der C -Sprache kann die char -Typ -Konvertierung direkt in einen anderen Typ konvertiert werden, wenn: Casting: Verwenden von Casting -Zeichen. Automatische Konvertierung des Typs: Wenn ein Datentyp einen anderen Werttyp berücksichtigen kann, wandelt der Compiler diese automatisch um.

In der C -Sprache ist der Hauptunterschied zwischen char und wchar_t die Zeichencodierung: char verwendet ASCII oder erweitert ASCII, wchar_t Unicode; char nimmt 1-2 Bytes auf, wchar_t nimmt 2-4 Bytes auf; char ist für englischen Text geeignet. Wchar_t ist für mehrsprachige Text geeignet. char ist weithin unterstützt, wchar_t hängt davon ab, ob der Compiler und das Betriebssystem Unicode unterstützen. char ist in der Charakterbereich begrenzt, WCHAR_T hat einen größeren Charakterbereich und spezielle Funktionen werden für arithmetische Operationen verwendet.

Es gibt keine integrierte Summenfunktion in der C-Sprache, daher muss sie selbst geschrieben werden. Die Summe kann erreicht werden, indem das Array durchquert und Elemente akkumulieren: Schleifenversion: Die Summe wird für die Schleifen- und Arraylänge berechnet. Zeigerversion: Verwenden Sie Zeiger, um auf Array-Elemente zu verweisen, und eine effiziente Summierung wird durch Selbststillstandszeiger erzielt. Dynamisch Array -Array -Version zuweisen: Zuordnen Sie Arrays dynamisch und verwalten Sie selbst den Speicher selbst, um sicherzustellen, dass der zugewiesene Speicher befreit wird, um Speicherlecks zu verhindern.
