次の方法で共有


String コンストラクタ (SByte*, Int32, Int32)

String クラスの新しいインスタンスを初期化し、8 ビット符号付き整数の配列を指す指定のポインタ、配列内の開始文字位置、および長さにより示される値に設定します。

このコンストラクタは、CLS に準拠していません。  

名前空間: System
アセンブリ: mscorlib (mscorlib.dll 内)

構文

'宣言
Visual Basic は、安全でない型を使用したり戻したりする API をサポートしません。
'使用
Visual Basic は、安全でない型を使用したり戻したりする API をサポートしません。
[CLSCompliantAttribute(false)] 
public String (
    sbyte* value,
    int startIndex,
    int length
)
[CLSCompliantAttribute(false)] 
public:
String (
    signed char* value, 
    int startIndex, 
    int length
)
J# は、安全でない型を使用したり戻したりする API をサポートしません。
JScript は、安全でない型を使用したり戻したりする API をサポートしません。

パラメータ

  • value
    8 ビット符号付き整数の配列へのポインタ。
  • startIndex
    value 内の開始位置。
  • length
    使用する value 内の文字数。

例外

例外の種類 条件

ArgumentNullException

value が null 参照 (Visual Basic では Nothing) です。

ArgumentOutOfRangeException

startIndex または length が 0 未満です。

または

value + startIndex によって指定されるアドレスが、現在のプラットフォームで扱うことのできる範囲を超えたため、アドレス計算がオーバーフローしました。

または

初期化対象の新しい文字列の長さが大きすぎて、メモリを確保できません。

ArgumentException

value + startIndex によって指定されたアドレスが 64K 未満です。

または

(value が ASCII でエンコードされていると仮定すると) value では、String の新しいインスタンスを初期化できません。

AccessViolationException

value、startIndex、および length の組み合わせによって参照されるアドレスは無効です。

解説

value パラメータは、ASCII エンコードの文字列を表す配列へのポインタを指定する必要があります。つまり、文字列は、ANSI コード ページを使ってエンコードされます。

length がゼロの場合は、新しいインスタンスが空の文字列 ("") に初期化されます。

このコンストラクタは value の startIndex から (startIndex + length - 1) までの文字を処理します。

指定した範囲が、この一連の文字に割り当てられたメモリの外部にある場合、このコンストラクタの動作はシステムに依存します。たとえば、このような状況は、アクセス違反の原因となる可能性があります。

C# では、このコンストラクタはアンセーフ コードのコンテキストだけで定義されます。

使用例

このコンストラクタを使用して String クラスのインスタンスを作成する方法を次の簡単なコード例で示します。

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") ) );

プラットフォーム

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 によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。

バージョン情報

.NET Framework

サポート対象 : 2.0、1.1、1.0

参照

関連項目

String クラス
String メンバ
System 名前空間
SByte 構造体
Int32 構造体