C#에서 하한이 0이 아닌 배열 구문 분석
배열에 대해 이야기할 때, 배열이 몇 번째부터 시작하는지 물으면 대부분의 프로그래머들은 배열이 당연히 0부터 시작한다고 직접 대답할 것으로 추정됩니다. 물론 이 대답은 맞습니다. 이제 C#에서 하한이 0이 아닌 배열을 살펴보겠습니다.
먼저 배열에 대한 관련 소개를 살펴보겠습니다.
1. 배열: 여러 데이터 항목을 컬렉션으로 처리할 수 있는 메커니즘입니다.
2. 배열 분류: CLR에서 배열은 1차원 배열, 다차원 배열, 인터리브 배열로 나눌 수 있습니다.
3. 배열 유형: 모든 배열은 추상 유형인 System.Array를 상속하고 이 유형은 System.Object를 상속하므로 해당 배열이 참조 유형임을 의미합니다.
배열을 생성할 때 배열 요소 외에도 배열 객체가 차지하는 메모리 블록에는 유형 객체 포인터, 동기화된 인덱스 블록 및 추가 멤버도 포함됩니다. 위의 배열 분류에서는 CLR이 인터리브 배열을 지원하므로 C#에서 인터리브 배열을 구현할 수 있습니다. 인터리브 배열은 인터리브 배열의 요소에 액세스한다는 의미입니다. 또는 다중 배열 액세스.
배열에 관련된 작업 중에 배열이 실제 매개변수로 메서드에 전달되면 실제로 전달되는 것은 배열에 대한 참조이므로 호출된 메서드가 배열의 요소를 수정할 수 있습니다. (수정을 원하지 않는 경우 배열의 복사본을 생성하여 이 복사본을 메서드에 전달해야 합니다.)
다음은 배열을 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; }
위 정수 배열을 DataTable로 변환하는 연산 방법입니다. 바이트, 부동 소수점 및 기타 유형의 변환은 해당 매개 변수 유형을 수정하면 됩니다. 따라서 여기서는 자세히 소개하지 않겠습니다.
다음으로 "하한이 아닌 배열"에 대한 관련 지식을 자세히 살펴보겠습니다.
하한이 아닌 배열은 성능 측면에서 더 잘 최적화되지 않았기 때문에 , 일반적인 용도로는 사용되지 않습니다. 성능 손실이 중요하지 않거나 언어 간 이식이 필요한 경우 0이 아닌 배열 사용을 고려할 수 있습니다. 이름에서 알 수 있듯이 "0이 아닌 하한 배열"이라는 개념은 도입되지 않습니다.
C#에서 생성하려면 Array의 CreateInstance() 메서드를 사용하세요. 이 메서드에는 배열 요소 유형, 배열 차원, 각 차원의 하한 및 각 차원의 요소 수를 지정할 수 있는 여러 오버로드가 있습니다.
CreateInstance()를 호출할 때 배열에 메모리를 할당하고 매개변수 정보를 배열 메모리의 오버헤드 부분에 저장한 다음 배열에 대한 참조를 반환합니다.
다음으로 이 메서드의 기본 구현 코드를 살펴보겠습니다.
[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); }
위 코드를 본 후에는 0이 아닌 염기 생성에 대한 일반적인 이해가 있어야 합니다. Enaches() 메소드의 기본 코드를 자세히 살펴보겠습니다.
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; }
0이 아닌 기본 배열 생성 방법에 대한 자세한 소개는 없습니다. 이를 사용해야 하는 경우 제공된 메소드 오버로드에 따라 해당 버전을 선택할 수 있습니다.

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











C 언어 커버 산술, 할당, 조건, 논리, 비트 연산자 등의 기호의 사용 방법은 기본 수학 연산에 사용되며, 할당 연산자는 할당 및 추가, 곱하기, 분할 할당에 사용되며, 곱하기 및 분할 할당에 사용되며, 조건에 따라 조건 운영자가 사용되며, 비트 오퍼레이터에 사용되며, 스페셜 오퍼레이터는 비트 수준의 운영에 사용됩니다. 포인터, 파일 종료 마커 및 비수통 값.

C에서 숯 유형은 문자열에 사용됩니다. 1. 단일 문자를 저장하십시오. 2. 배열을 사용하여 문자열을 나타내고 널 터미네이터로 끝납니다. 3. 문자열 작동 함수를 통해 작동합니다. 4. 키보드에서 문자열을 읽거나 출력하십시오.

C 언어에서 특수 문자는 다음과 같은 탈출 시퀀스를 통해 처리됩니다. \ n 라인 브레이크를 나타냅니다. \ t는 탭 문자를 의미합니다. char c = '\ n'과 같은 특수 문자를 나타 내기 위해 탈출 시퀀스 또는 문자 상수를 사용하십시오. 백 슬래시는 두 번 탈출해야합니다. 다른 플랫폼과 컴파일러마다 다른 탈출 시퀀스가있을 수 있습니다. 문서를 참조하십시오.

멀티 스레딩과 비동기식의 차이점은 멀티 스레딩이 동시에 여러 스레드를 실행하는 반면, 현재 스레드를 차단하지 않고 비동기식으로 작업을 수행한다는 것입니다. 멀티 스레딩은 컴퓨팅 집약적 인 작업에 사용되며 비동기식은 사용자 상호 작용에 사용됩니다. 멀티 스레딩의 장점은 컴퓨팅 성능을 향상시키는 것이지만 비동기의 장점은 UI 스레드를 차단하지 않는 것입니다. 멀티 스레딩 또는 비동기식을 선택하는 것은 작업의 특성에 따라 다릅니다. 계산 집약적 작업은 멀티 스레딩을 사용하고 외부 리소스와 상호 작용하고 UI 응답 성을 비동기식으로 유지 해야하는 작업을 사용합니다.

char 어레이는 문자 시퀀스를 C 언어로 저장하고 char array_name [size]로 선언됩니다. 액세스 요소는 첨자 연산자를 통해 전달되며 요소는 문자열의 끝점을 나타내는 널 터미네이터 '\ 0'으로 끝납니다. C 언어는 strlen (), strcpy (), strcat () 및 strcmp ()와 같은 다양한 문자열 조작 함수를 제공합니다.

C 언어에서 char와 wchar_t의 주요 차이점은 문자 인코딩입니다. char ascii를 사용하거나 ascii를 확장하고, wchar_t는 유니 코드를 사용합니다. Char는 1-2 바이트를 차지하고 WCHAR_T는 2-4 바이트를 차지합니다. Char는 영어 텍스트에 적합하며 WCHAR_T는 다국어 텍스트에 적합합니다. Char_t는 널리 지원되며, 컴파일러 및 운영 체제가 유니 코드를 지원하는지 여부에 따라 다릅니다. Char는 문자 범위가 제한되며 WCHAR_T는 더 큰 문자 범위를 가지며 특수 함수는 산술 작업에 사용됩니다.

C 언어에서 숯 유형 변환은 다른 유형으로 직접 변환 할 수 있습니다. 캐스팅 : 캐스팅 캐릭터 사용. 자동 유형 변환 : 한 유형의 데이터가 다른 유형의 값을 수용 할 수 있으면 컴파일러가 자동으로 변환됩니다.

C 언어에는 내장 합계 기능이 없으므로 직접 작성해야합니다. 합계는 배열 및 축적 요소를 가로 질러 달성 할 수 있습니다. 루프 버전 : 루프 및 배열 길이를 사용하여 계산됩니다. 포인터 버전 : 포인터를 사용하여 배열 요소를 가리키며 효율적인 합계는 자체 증가 포인터를 통해 달성됩니다. 동적으로 배열 버전을 할당 : 배열을 동적으로 할당하고 메모리를 직접 관리하여 메모리 누출을 방지하기 위해 할당 된 메모리가 해제되도록합니다.
