내보내기(0) 인쇄
모두 확장
이 문서는 기계로 번역한 것입니다. 원본 텍스트를 보려면 포인터를 문서의 문장 위로 올리십시오. 추가 정보
번역
원본

String 생성자

String 클래스의 새 인스턴스를 초기화합니다.

이 멤버는 오버로드됩니다. 구문, 사용법 및 예제를 비롯하여 이 멤버에 대한 자세한 내용을 보려면 오버로드 목록에서 이름을 클릭합니다.

  이름 설명
Public 메서드 String(Char*) 유니코드 문자 배열에 대한 지정된 포인터가 가리키는 값으로 String 클래스의 새 인스턴스를 초기화합니다.
Public 메서드 String(Char[]) 유니코드 문자 배열에서 나타내는 값으로 String 클래스의 새 인스턴스를 초기화합니다.
Public 메서드 String(SByte*) 8비트 부호 있는 정수 배열에 대한 포인터가 나타내는 값으로 String 클래스의 새 인스턴스를 초기화합니다.
Public 메서드 String(Char, Int32) 지정한 횟수만큼 반복되는 지정된 유니코드 문자가 나타내는 값으로 String 클래스의 새 인스턴스를 초기화합니다.
Public 메서드 String(Char*, Int32, Int32) 유니코드 문자 배열에 대한 지정된 포인터가 나타내는 값, 해당 배열 내의 시작 문자 위치 및 길이로 String 클래스의 새 인스턴스를 초기화합니다.
Public 메서드 String(Char[], Int32, Int32) 유니코드 문자 배열에서 나타내는 값, 해당 배열 내의 시작 문자 위치 및 길이로 String 클래스의 새 인스턴스를 초기화합니다.
Public 메서드 String(SByte*, Int32, Int32) 8비트 부호 있는 정수 배열에 대한 지정된 포인터가 나타내는 값, 해당 배열 내의 시작 위치 및 길이로 String 클래스의 새 인스턴스를 초기화합니다.
Public 메서드 String(SByte*, Int32, Int32, Encoding) 8비트 부호 있는 정수 배열에 대한 지정된 포인터가 나타내는 값, 해당 배열 내의 시작 문자 위치, 길이 및 Encoding 개체로 String 클래스의 새 인스턴스를 초기화합니다.
위쪽

이 섹션의 내용

오버로드 된 생성자 구문
매개 변수
예외
어느 메서드를 호출할 수 있습니까?
문자열 만들기
반복적인 문자열 처리
인스턴스화한 문자열의 예.
       문자열 할당 사용
       문자 배열 사용
       문자 배열의 일부를 사용하고 단일 문자 반복
       문자 배열에 대한 포인터 사용
       포인터와 배열의 범위 사용
       부호 있는 바이트 배열에 대한 포인터 사용
버전 정보

오버로드 된 생성자 구문

String 생성자는 두 가지 범주로 나뉩니다: 포인터 매개변수가 없는 것과 포인터 매개변수가 있는 것. 포인터를 사용하는 생성자는 CLS 규격이 아닙니다. 그리고, Visual Basic는 포인터 사용을 지원하지 않고, C#은 안전하지않은 컨텍스트에서 실행하려면 포인터를 사용하는 코드를 필요로 합니다. 자세한 내용은 C# 참조에서 안전하지 않은 키워드 를 참조하십시오.

부가적인 지침서에 따라 오버로드를 선택합니다, 더 많은 정보는 어느 메서드를 호출할 수 있습니까?를 참조하십시오.

String(Char[] value )

유니코드 문자 배열에서 나타내는 값으로 새 인스턴스를 초기화합니다. 이 생성자는 유니코드 문자를 복사합니다. (예제).

String(Char[] value , Int32 startIndex , Int32 length )

유니코드 문자 배열에서 나타내는 값, 해당 배열 내의 시작 문자 위치 및 길이로 클래스의 새 인스턴스를 초기화합니다.(예제)

String(Char c , Int32 count )

지정한 횟수만큼 반복되는 지정된 유니코드 문자가 나타내는 값으로 클래스의 새 인스턴스를 초기화합니다.(예제)

String(char* value )

(CLS-규격이 아닌경우)유니코드 문자 배열에 대한 지정된 포인터가 가리키는 값으로 클래스의 새 인스턴스를 초기화합니다.(예제)

권한: SecurityCriticalAttribute 는 직접 실행 호출자에 대한 완전 신뢰가 필요합니다. 이 멤버는 부분적으로 신뢰할 수 있거나 투명한 코드에서 사용할 수 없습니다.

String(char* value , Int32 startIndex , Int32 length )

(CLS-규격이 아닌경우) 는 유니코드 문자 배열에 대한 지정된 포인터가 나타내는 값, 해당 배열 내의 시작 문자 위치 및 길이로 새 인스턴스를 초기화합니다. 생성자는 startIndex 인덱스에서 value 시작과 startIndex + length - 1 인덱스에서 마지막으로부터 유니코드 문자를 복사합니다(예제).

권한: SecurityCriticalAttribute 는 직접 실행 호출자에 대한 완전 신뢰가 필요합니다. 이 멤버는 부분적으로 신뢰할 수 있거나 투명한 코드에서 사용할 수 없습니다.

String(SByte* value )

(CLS-규격이 아닌 경우)8비트 부호 있는 정수 배열에 대한 포인터가 나타내는 값으로 새 인스턴스를 초기화합니다. 이 배열은 현재 시스템 코드 페이지를 사용하여 인코딩된 문자열을 나타내는 배열로 간주됩니다 (즉, Encoding.Default 로 지정된 인코딩). 이 생성자는 포인터로 지정한 위치에서 시작하여 null 문자(0x0000)에 도달할 때까지 value에서 문자를 처리합니다(예제).

권한: SecurityCriticalAttribute 는 직접 실행 호출자에 대한 완전 신뢰가 필요합니다. 이 멤버는 부분적으로 신뢰할 수 있거나 투명한 코드에서 사용할 수 없습니다.

String(SByte* value , Int32 startIndex , Int32 length )

(CLS-규격이 아닌 경우) 8비트 부호 있는 정수 배열에 대한 포인터가 나타내는 값, 해당 배열 내의 시작 위치 및 길이로 새 인스턴스를 초기화합니다. startIndex 에서 값 시작과 startIndex + length - 1 에서 마지막으로부터 생성자는 문자들을 처리합니다(예제)..

권한: SecurityCriticalAttribute 는 직접 실행 호출자에 대한 완전 신뢰가 필요합니다. 이 멤버는 부분적으로 신뢰할 수 있거나 투명한 코드에서 사용할 수 없습니다.

String(SByte* value , Int32 startIndex , Int32 length , Encoding enc )

(CLS-규격이 아닌 경우) 8비트 부호 있는 정수 배열에 대한 포인터가 나타내는 값, 해당 배열 내의 시작 위치 및 길이, 그리고 Encoding 개체로 새 인스턴스를 초기화합니다.

권한: SecurityCriticalAttribute 는 직접 실행 호출자에 대한 완전 신뢰가 필요합니다. 이 멤버는 부분적으로 신뢰할 수 있거나 투명한 코드에서 사용할 수 없습니다.

매개 변수

포인터 매개변수를 포함하지 않는 String 생성자를 사용하는 매개 변수의 전체 목록은 다음과 같습니다. 각 오버 로드에 사용되는 매개 변수에 따라 위의 오버 로드 구문을 참조 하십시오.

Parameter

형식

설명

value

Char []

유니코드 문자 배열입니다.

c

Char

유니코드 문자입니다.

startIndex

Int32

새 문자열에 있는 첫째 문자의 value 시작위치를 가져옵니다.

기본값은 "0"입니다.

length

Int32

새 문자열에 포함된 value 에서 문자의 수입니다.

기본값: Array.Length

count

Int32

횟수인 c 문자는 새 문자열에서 반복됩니다. count 가 0이면, 새 개체의 값은 String.Empty입니다.

포인터 매개변수를 포함하는 String 생성자를 사용하는 매개 변수의 전체 목록은 다음과 같습니다. 각 오버 로드에 사용되는 매개 변수에 따라 위의 오버 로드 구문을 참조 하십시오.

Parameter

형식

설명

value

Char *

또는

SByte *

8 비트의 부호 있는 정수 배열 또는 null로 끝나는 유니코드 문자 배열의 포인터입니다. 만일 valuenull 이거나 빈 배열이라면, 새 문자열의 값은 String.Empty 입니다.

startIndex

Int32

새로운 문자열에서 첫 문자열을 정의하는 배열 요소의 인덱스입니다.

기본값은 "0"입니다.

length

Int32

배열 요소를 사용하여 새 문자열을 만들 수 있습니다. 만일 길이가 0이면, 생성자는 값이 String.Empty 인 문자열을 만듭니다.

기본값: Array.Length

enc

Encoding

value 배열이 인코딩되는 방법을 지정하는 개체입니다.

기본값: Encoding.Default, 또는 시스템의 현재 ANSI 코드 페이지

예외

포인터 매개 변수를 포함 하지 않는 생성자에서 출력된 예외 목록은 다음과 같습니다.

예외

조건

의해 쓰로우 됩니다.

ArgumentNullException

valuenull입니다.

String(Char[], Int32, Int32)

ArgumentOutOfRangeException

startIndex, length 또는 count가 0보다 작은 경우

또는

startIndexlength의 합계가 value에 포함된 요소의 수보다 큰 경우

또는

count가 0보다 작은 경우

String(Char, Int32)

String(Char[], Int32, Int32)

포인터 매개 변수를 포함 하지 않는 생성자에서 출력된 예외 목록은 다음과 같습니다.

예외

조건

의해 쓰로우 됩니다.

ArgumentException

value 은 잘못된 유니코드 문자를 포함하는 배열을 지정합니다.

또는

value 또는 value + startIndex 는 64k보다 작은 주소를 지정합니다.

또는

String 인스턴스는 value 이 기본 코드 페이지 인코딩을 사용하지 않기 때문에 value 바이트 배열로부터 초기화 될 수 없습니다.

포인터를 포함하는 모든 생성자.

ArgumentNullException

value이 null입니다.

String(SByte*)

String(SByte*, Int32, Int32)

String(SByte*, Int32, Int32, Encoding)

ArgumentOutOfRangeException

주소가 지정된 모든 문자에 대한 읽기 권한이 현재 프로세스에 없는 경우

또는

startIndex 또는 length가 0보다 작거나, value + startIndex가 포인터 오버플로를 발생시키거나, 주소가 지정된 모든 문자에 대한 읽기 권한이 현재 프로세스에 없는 경우

또는

새 문자열 길이가 너무 길어 할당할 수 없는 경우

포인터를 포함하는 모든 생성자.

AccessViolationException

value 또는 value + startIndex + length - 1 이, 잘못된 주소를 지정하는 경우.

String(SByte*)

String(SByte*, Int32, Int32)

String(SByte*, Int32, Int32, Encoding)

어느 메서드를 호출할 수 있습니까?

호출 또는 사용

문자열을 만듭니다.

리터럴 문자열또는 기존 문자열에 대한 할당 (예제)

전체 문자 배열에서 문자열을 만듭니다.

String(Char[]) (예제)

문자 배열의 일부로부터 문자열을 생성합니다.

String(Char[], Int32, Int32) (예제)

같은 문자가 여러 번 반복되는 문자열을 만듭니다.

String(Char, Int32) (예제)

유니코드 또는 와이드 문자 배열에 대한 포인터에서 문자열을 만듭니다.

String(Char*)

포인터를 사용하여 일부 유니코드 또는 와이드 문자 배열에서 문자열을 만듭니다.

String(Char*, Int32, Int32)

C++ char 배열로부터 문자열을 생성합니다.

String(SByte*) , String(SByte*, Int32, Int32)

또는

String(SByte*, Int32, Int32, Encoding)

ASCII 문자에서 문자열을 만듭니다.

ASCIIEncoding.GetString

문자열 만들기

프로그래밍 방식으로 문자열 만들기에서 자주 사용하는 기술은 이 예제 에서 나오는 것과 같은 간단한 할당입니다. String 클래스 역시 다음 값들로부터 문자열을 생성하는 생성자 오버로드의 네 가지 유형들을 포함합니다.

  • 문자 배열에서(UTF-16로 인코딩된 문자 배열). 이것의 부분 또는 전체 배열에서 문자들로 String 개체를 생성할 수 있습니다. String(Char[]) 생성자는 새로운 문자열에 대한 배열에서 모든 문자들을 복사합니다. String(Char[], Int32, Int32) 생성자는 새 문자열의 startIndex 인덱스부터 startIndex + length - 1 까지 인덱스의 문자들을 복사합니다. length 가 0이면, 새 문자열의 값은 String.Empty입니다.

    만일 코드가 같은 값을 가진 문자열을 반복적으로 인스턴스화할 경우, 문자열 만드는 다른 대체 방법을 사용하여 응용 프로그램 성능을 개선할 수 있습니다. 자세한 내용은, 반복적인 문자열 처리를 참조하세요.

  • String(Char, Int32) 생성자를 사용하여, 단일 문자는 복제되지 않거나, 하나, 혹은 보다 여러번 복제되어집니다. count 가 0이면, 새 문자열의 값은 String.Empty입니다.

  • 문자 null로 끝나는 배열에 대한 포인터로, String(Char*) 또는 String(Char*, Int32, Int32) 생성자가 사용됩니다.. 지정된 된 범위 또는 전체 배열은 문자열 초기화가 사용될 수 있습니다. 생성자는 지정된 포인터 또는 지정된 포인터 더하기 startIndex 와 계속해서 배열의 끝까지, 또는 length 문자로부터 시작 유니코드 문자들의 순서를 복사합니다. 만일 value 이 null 포인터 또는 length 이 0이면, 생성자는 값이 String.Empty 인 문자열을 만듭니다. 만일 복사 작업이 배열의 끝까지 진행되고 배열이 null로 끝나지 않으면, 생성자 동작은 시스템에 따라 다릅니다. 이러한 조건에서 액세스 위반이 발생할 수 있습니다.

    배열에 포함된 null 문자가(U+0000 또는 '\0') 있고 String(Char*, Int32, Int32) 오버로드가 호출되는 경우, 문자열 인스턴스는 null을 포함하는 length 문자를 포함합니다. 다음 예제는 String(Char*, Int32, Int32) 메서드로 전달되는 두 개의 null 문자를 10개의 요소의 배열에 대한 포인터가 포함할 때 일어나는 것을 보여줍니다. 주소는 배열의 시작이고 배열의 모든 요소는 문자열에 추가되어지기 때문에, 생성자는 두 개 null을 포함하여, 10 개의 문자로 구성된 문자열을 인스턴스화합니다. 반면, 동일한 배열이 String(Char*) 생성자로 전달되는 경우, 결과는 첫 번째 null 문자를 포함하지 않는 4 문자의 문자열입니다.

    
    using System;
    
    public class Example
    {
       public unsafe static void Main()
       {
          char[] chars = { 'a', 'b', 'c', 'd', '\0', 'A', 'B', 'C', 'D', '\0' };
          string s = null;
    
          fixed(char* chPtr = chars) {
             s = new string(chPtr, 0, chars.Length);            
          } 
    
          foreach (var ch in s)
             Console.Write("{0:X4} ", Convert.ToUInt16(ch));
          Console.WriteLine();
    
          fixed(char* chPtr = chars) {
             s = new string(chPtr);         
          }
    
          foreach (var ch in s)
             Console.Write("{0:X4} ", Convert.ToUInt16(ch));
          Console.WriteLine();    
       }
    }
    // The example displays the following output:
    //       0061 0062 0063 0064 0000 0041 0042 0043 0044 0000
    //       0061 0062 0063 0064
    
    
    

    배열은 유니코드 문자들을 포함해야 합니다. C++에서, 이것은 문자 배열이 Char[] 형식 또는 관리되지 않은 wchar_t[] 중 하나로 정의되어야만 합니다.

    만일 String(Char*) 오버로드가 호출되고 배열이 null로 끝나지 않는다면, 또는 String(Char*, Int32, Int32) 오버로드가 호출되고 startIndex + length- 1 이 문자들의 순서로 할당되는 메모리 외부 범위를 포함한다면, 생성자의 행동은 시스템에 따라 다르고, 액세스 위반이 발생할 수 있습니다. 또한, Intel Itanium 프로세서에서, String(Char*, Int32, Int32) 생성자를 촐훌하는 것은 DataMisalignedException 예외를 출력할 수 있습니다. 이 경우, String(Char[], Int32, Int32) 를 대신 호출합니다.

  • 부호 있는 바이트 배열에 대한 포인터에서. 지정된 된 범위 또는 전체 배열은 문자열 초기화가 사용될 수 있습니다. 바이트들의 순서는 기본 코드 페이지 인코딩을 사용하여 해석 될 수 있거나, 인코딩이 생성자 호출에서 지정될 수 있습니다. 생성자가 null로 종료되지않는 전체 배열을 인스턴스화하려는 경우, 배열의 범위는 value + startIndex 에서 value + startIndex + length 까지 배열에 할당된 메모리의 외부이고, 이 생성자의 동작은 시스템에 따라 다르며, 액세스 위반이 발생할 수 있습니다.

    매개변수로 부호 있는 바이트 배열을 포함하는 세 개의 생성자들은 문자열로 주로 C++ char 배열로 변환되도록 이 예제에서 보여지는 것처럼 설계됩니다.

    
    using namespace System;
    
    void main()
    {
          char chars[] = { 'a', 'b', 'c', 'd', '\x00' };
    
          char* charPtr = chars;
          String^ value = gcnew String(charPtr);
    
          Console::WriteLine(value);
    }
    // The example displays the following output:
    //      abcd
    
    
    

    만일 값이 0 인 모든 null 문자(\0) 또는 바이트 배열에 포함 되어 있는 경우, String(SByte*, Int32, Int32) 오버로드가 호출되고 문자열 인스턴스가 null을 포함하는 length 문자들을 포함합니다. 다음 예제는 두 개의 null문자를 포함하는 10개 요소의 배열에 대한 포인터가 String(SByte*, Int32, Int32) 메서드로 전달될때 일어나는 것을 보여줍니다. 주소는 배열의 시작이고 배열의 모든 요소는 문자열에 추가되어지기 때문에, 생성자는 두 개 null을 포함하여, 10 개의 문자로 구성된 문자열을 인스턴스화합니다. 반면, 만일 동일한 배열이 String(SByte*) 생성자로 전달될 경우, 결과는 첫 번째 null 문자를 포함하지 않는 네 문자의 문자열입니다.

    
    using System;
    
    public class Example
    {
       public unsafe static void Main()
       {
          sbyte[] bytes = { 0x61, 0x62, 0x063, 0x064, 0x00, 0x41, 0x42,0x43, 0x44, 0x00 };
    
          string s = null;
          fixed (sbyte* bytePtr = bytes) {
             s = new string(bytePtr, 0, bytes.Length);
          }
    
          foreach (var ch in s)
             Console.Write("{0:X4} ", Convert.ToUInt16(ch));
    
          Console.WriteLine();    
    
          fixed(sbyte* bytePtr = bytes) {
             s = new string(bytePtr);         
          }
    
          foreach (var ch in s)
             Console.Write("{0:X4} ", Convert.ToUInt16(ch));
          Console.WriteLine();    
    
       }
    }
    // The example displays the following output:
    //       0061 0062 0063 0064 0000 0041 0042 0043 0044 0000
    //       0061 0062 0063 0064
    
    
    

    기본 ANSI 코드 페이지를 사용하여 String(SByte*)String(SByte*, Int32, Int32) 생성자가 value 를 해석하기 때문에, 이들 생성자를 동일한 바이트 배열과 함께 호출하는 것은 다른 시스템들에서 다른 값을 가지는 문자열을 만들 수 있습니다.

반복적인 문자열 처리

텍스트 스트림을 구문 분석하거나 디코딩하는 응용 프로그램은 대개 String(Char[], Int32, Int32) 생성자나 StringBuilder.Append(Char[], Int32, Int32) 메서드를 사용하여 문자 배열을 문자열로 변환합니다. 메모리 낭비 반복하여 만든 문자열을 다시 사용하는 대신 동일한 값을 가진 새 문자열을 만들기. String(Char[], Int32, Int32) 생성자를 호출하여 반복적으로 같은 문자열 값을 생성하는 경우, 비록 동일한 값이 어떻게 될 것인지 모를지라도, 조회 테이블을 대신 사용할 수 있습니다.

예를 들어, XML 태그와 특성이 들어 있는 파일에서 문자 스트림을 읽고 구문 분석하는 경우 사용자가 스트림을 구문 분석하면 상징적 의미가 있는 문자의 배열인 특정 토큰이 반복적으로 발생합니다. 문자열 "0", "1", "true" 및 "false"에 해당하는 토큰은 XML 스트림에서 자주 발생할 수 있습니다.

각 토큰을 새 문자열로 변환하는 대신 일반적으로 발생하는 문자열을 보유할 System.Xml.NameTable 개체를 만들 수 있습니다. NameTable 개체는 임시 메모리를 할당하지 않고 저장된 문자열을 검색하므로 성능을 향상시킵니다. 토큰을 발생 하는 경우, 테이블에서 토큰을 검색하기 위해 NameTable.Get(Char[], Int32, Int32) 메서드를 사용합니다. 토큰이 있으면 이 메서드는 해당 문자열을 반환합니다. 토큰이 없는 경우, 일치하는 문자열을 얻고 테이블로 토큰을 넣기 위해, NameTable.Add(Char[], Int32, Int32) 메서드를 사용합니다.

예 1: 문자열 할당 사용하기

다음 예제는 리터럴 문자열을 할당하여 새 문자열을 만듭니다. 첫 번째 문자열의 값을 할당하여 두 번째 문자열을 만듭니다. 이것은 새로운 String 개체를 인스턴스화 하기 위한 가장 일반적인 두가지 방식입니다.


using System;

public class Example
{
   public static void Main()
   {
      String value1 = "This is a string.";
      String value2 = value1;
      Console.WriteLine(value1);
      Console.WriteLine(value2);
   }
}
// The example displays the following output:
//    This is a string.
//    This is a string.


예제 2: 문자 배열 사용

다음 예제에서는 문자 배열에서 새로운 String 개체를 만드는 방법을 보여줍니다.


// Unicode Mathematical operators
char [] charArr1 = {'\u2200','\u2202','\u200F','\u2205'};
String szMathSymbols = new String(charArr1);

// Unicode Letterlike Symbols
char [] charArr2 = {'\u2111','\u2118','\u2122','\u2126'};
String szLetterLike = new String (charArr2);

// Compare Strings - the result is false
Console.WriteLine("The Strings are equal? " +
    (String.Compare(szMathSymbols, szLetterLike)==0?"true":"false") );


예3 : 문자 배열의 일부를 사용하고 단일 문자 반복

다음 예제는 문자 배열의 부분으로 새 String 개체를 만드는 방법과 단일 문자를 여러 번 포함하는 String 개체를 만드는 방법을 설명합니다.


// Create a Unicode String with 5 Greek Alpha characters
String szGreekAlpha = new String('\u0391',5);
// Create a Unicode String with a Greek Omega character
String szGreekOmega = new String(new char [] {'\u03A9','\u03A9','\u03A9'},2,1);

String szGreekLetters = String.Concat(szGreekOmega, szGreekAlpha, szGreekOmega.Clone());

// Examine the result
Console.WriteLine(szGreekLetters);

// The first index of Alpha
int ialpha = szGreekLetters.IndexOf('\u0391');
// The last index of Omega
int iomega = szGreekLetters.LastIndexOf('\u03A9');

Console.WriteLine("The Greek letter Alpha first appears at index " + ialpha +
    " and Omega last appears at index " + iomega + " in this String.");


예 4: 문자 배열에 대한 포인터를 사용하기

다음 예제는 문자의 배열에 대한 포인터로 String 개체를 만드는 방법을 설명합니다. C# 예제는 /unsafe 컴파일러 스위치를 사용하여 컴파일되어야 합니다.


using System;

public class Example
{
   public static unsafe void Main()
   {
      char[] characters = { 'H', 'e', 'l', 'l', 'o', ' ', 
                            'w', 'o', 'r', 'l', 'd', '!', '\u0000' };
      string value;

      fixed (char* charPtr = characters) {
         value = new String(charPtr);
      }                            
      Console.WriteLine(value);
   }
}
// The example displays the following output:
//        Hello world!


예5: 포인터와 배열 범위에서 문자열 인스턴스화하기.

다음 예제는 마침표 또는 느낌표에 대한 문자 배열의 요소를 검사합니다. 만일 이것을 찾을 경우, 구두점 기호 앞에 문자 배열에서 문자열을 인스턴스화합니다. 그렇지 않은 경우, 문자열 배열의 전체 내용을 인스턴스화합니다. C# 예제는 /unsafe 컴파일러 스위치를 사용하여 컴파일되어야 합니다.


using System;

public class Example
{
   public static unsafe void Main()
   {
      char[] characters = { 'H', 'e', 'l', 'l', 'o', ' ', 
                            'w', 'o', 'r', 'l', 'd', '!', '\u0000' };
      String value;

      fixed (char* charPtr = characters) {
         int length = 0;
         Char* iterator = charPtr;

         while (*iterator != '\x0000')
         {
            if (*iterator == '!' || *iterator == '.')
               break;
            iterator++;
            length++;
         }
         value = new String(charPtr, 0, length);
      }
      Console.WriteLine(value);
   }
}
// The example displays the following output:
//      Hello World


예6: 부호 있는 바이트 배열에 대한 문자열 포인터에서 인스턴스화하기

다음의 예제에서는 String(SByte*) 생성자를 사용하여 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") );
}


버전 정보

.NET Framework

모든 오버로드는 지원됩니다: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

모든 오버로드는 지원됩니다: 4, 3.5 SP1

이식 가능한 클래스 라이브러리

SByte * 매개변수 없이 모든 오버로드가 지원됩니다.

Windows 스토어 앱용 .NET

SByte * 매개변수없이 모든 매개변수가 지원됩니다: Windows 8

커뮤니티 추가 항목

추가
표시:
© 2014 Microsoft