Freigeben über


String-Konstruktor (SByte*, Int32, Int32)

Initialisiert eine neue Instanz der String-Klasse mit dem Wert, der durch einen angegebenen Zeiger auf ein Array von 8-Bit-Ganzzahlen mit Vorzeichen, die Position des ersten Zeichens innerhalb dieses Arrays und die Länge angegeben wird.

Dieser Konstruktor ist nicht CLS-kompatibel.  

Namespace: System
Assembly: mscorlib (in mscorlib.dll)

Syntax

'Declaration
Visual Basic unterstützt keine APIs, die unsichere Typen nutzen oder zurückgeben.
'Usage
Visual Basic unterstützt keine APIs, die unsichere Typen nutzen oder zurückgeben.
[CLSCompliantAttribute(false)] 
public String (
    sbyte* value,
    int startIndex,
    int length
)
[CLSCompliantAttribute(false)] 
public:
String (
    signed char* value, 
    int startIndex, 
    int length
)
J# unterstützt keine APIs, die unsichere Typen nutzen oder zurückgeben.
JScript unterstützt keine APIs, die unsichere Typen nutzen oder zurückgeben.

Parameter

  • value
    Ein Zeiger auf ein Array von 8-Bit-Ganzzahlen mit Vorzeichen.
  • startIndex
    Die Anfangsposition in value.
  • length
    Die Anzahl der aus value zu verwendenden Zeichen.

Ausnahmen

Ausnahmetyp Bedingung

ArgumentNullException

value ist NULL (Nothing in Visual Basic).

ArgumentOutOfRangeException

startIndex oder length ist kleiner als 0 (null).

- oder -

Die durch value+startIndex angegebene Adresse ist für die aktuelle Plattform zu groß, d. h., bei der Berechnung der Adresse ist ein Überlauf aufgetreten.

- oder -

Die Länge der zu initialisierenden neuen Zeichenfolge ist zu groß und kann daher nicht reserviert werden.

ArgumentException

Die durch value+startIndex angegebene Adresse ist kleiner als 64K.

– oder –

Eine neue Instanz von String konnte nicht mit value initialisiert werden, wenn angenommen wird, dass value in ASCII codiert ist.

AccessViolationException

value, startIndex und length geben zusammen eine ungültige Adresse an.

Hinweise

Es wird angenommen, dass der value-Parameter auf ein Array zeigt, das eine in ASCII codierte Zeichenfolge darstellt, d. h., die Zeichenfolge ist unter Verwendung der ANSI-Codepage codiert.

Wenn length 0 (null) ist, wird die neue Instanz mit der leeren Zeichenfolge ("") initialisiert.

Dieser Konstruktor verarbeitet Zeichen aus value ab startIndex bis (startIndex+length-1).

Wenn der angegebene Bereich den für die Zeichenfolge reservierten Speicherbereich überschreitet, ist das Verhalten dieses Konstruktors systemabhängig. Eine derartige Situation könnte z. B. zu einer Zugriffsverletzung führen.

In C# ist dieser Konstruktor nur im Kontext von unsicherem Code definiert.

Beispiel

Im folgenden einfachen Codebeispiel wird veranschaulicht, wie mit diesem Konstruktor eine Instanz der String-Klasse erstellt werden kann.

unsafe
{
    // Null terminated ASCII characters in an sbyte array
    String szAsciiUpper = null;
    sbyte[] sbArr1 = new sbyte[] { 0x41, 0x42, 0x43, 0x00 };
    // Instruct the Garbage Collector not to move the memory
    fixed(sbyte* pAsciiUpper = sbArr1)
    {
        szAsciiUpper = new String(pAsciiUpper);
    }
    String szAsciiLower = null;
    sbyte[] sbArr2 = { 0x61, 0x62, 0x63, 0x00 };
    // Instruct the Garbage Collector not to move the memory
    fixed(sbyte* pAsciiLower = sbArr2)
    {
        szAsciiLower = new String(pAsciiLower, 0, sbArr2.Length);
    }
    // Prints "ABC abc"
    Console.WriteLine(szAsciiUpper + " " + szAsciiLower);

    // Compare Strings - the result is true
    Console.WriteLine("The Strings are equal when capitalized ? " +
        (String.Compare(szAsciiUpper.ToUpper(), szAsciiLower.ToUpper())==0?"true":"false") );

    // This is the effective equivalent of another Compare method, which ignores case
    Console.WriteLine("The Strings are equal when capitalized ? " +
        (String.Compare(szAsciiUpper, szAsciiLower, true)==0?"true":"false") );
}
// Null terminated ASCII characters in a simple char array
char charArray3[4] = {0x41,0x42,0x43,0x00};
char * pstr3 =  &charArray3[ 0 ];
String^ szAsciiUpper = gcnew String( pstr3 );
char charArray4[4] = {0x61,0x62,0x63,0x00};
char * pstr4 =  &charArray4[ 0 ];
String^ szAsciiLower = gcnew String( pstr4,0,sizeof(charArray4) );

// Prints "ABC abc"
Console::WriteLine( String::Concat( szAsciiUpper,  " ", szAsciiLower ) );

// Compare Strings - the result is true
Console::WriteLine( String::Concat(  "The Strings are equal when capitalized ? ", (0 == String::Compare( szAsciiUpper->ToUpper(), szAsciiLower->ToUpper() ) ? (String^)"TRUE" :  "FALSE") ) );

// This is the effective equivalent of another Compare method, which ignores case
Console::WriteLine( String::Concat(  "The Strings are equal when capitalized ? ", (0 == String::Compare( szAsciiUpper, szAsciiLower, true ) ? (String^)"TRUE" :  "FALSE") ) );

Plattformen

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

Siehe auch

Referenz

String-Klasse
String-Member
System-Namespace
SByte-Struktur
Int32-Struktur