2016-09-14 1 views
4

는이 코드 new [] {a, b}의 의미는 무엇입니까?

Stream foo() 
{ 
    ... 
    return new MemoryStream(new[] { a, b }); 
} 

을 발견하고는 무엇을 추측 할 수 있지만, 타입 정의 byte[]를 생략 할 수있는 이유에 대한 설명을 찾을 수 없습니다. msdn C# new 설명을 보았지만 너무 간단합니다. 그것은 내가 유형 정의 byte[] 생략 할 수있는 이유에 대한 설명을 찾을 수 없습니다 new byte[] { a, b }

과 동일

자네 말이 맞아

+1

에서 촬영 : 배열의 유형이 모두 바이트 인자로부터 유도 될 수 –

+4

b''A'와'때문에 배열은'Byte []'입니다. 이것은 [암시 적으로 형식화 된 배열] (https://msdn.microsoft.com/en-us/library/bb384090.aspx) –

+2

http://stackoverflow.com/questions/5678216/all-possible-c-sharp- array-initialization-syntaxes –

답변

6

배열 인스턴스의 유형이 배열 초기화 프로그램에 지정된 요소에서 추론되는 암시 적 형식의 배열을 만들 수 있습니다. 내재적으로 유형이 지정된 변수의 규 "은 내재적으로 유형화 된 배열에도 적용됩니다.

그것은 두 바이트가 포함 된 'MemoryStream` 인스턴스 생성 https://msdn.microsoft.com/en-us/library/bb384090.aspx

1

나는 그것이 무엇을 추측 할 수

생략 할 수있는 이유는 abbyte입니다. 컴파일러는 byte 배열을 생성한다는 것을 알기에 충분히 똑똑하기 때문에 형식을 명시 적으로 지정하도록 요청하지 않습니다.

Microsoft는이 바로 가기 here에 대해 설명합니다. 이 아이디어는 var을 사용하는 선언에서 유형을 생략하는 것과 비슷합니다. 실제 유형을 초기화 컨텍스트에서 유추 할 수있는 경우입니다.

2

형식 정의는 목록의 개체 형식에서 유추 할 수 있으므로 생략 할 수 있습니다.

C# 컴파일러는 작성한 내용이 유효하고 의도 한대로 실행되는지 확인하기 위해 컴파일 할 때 코드를 분석하는 작업을 많이합니다. 여전히 실수를 할 수는 있지만 c 또는 C++과 같은 언어에서는 (적게) 적습니다.

관련 문제