2014-12-02 1 views
45

가 C# 6.0
Dictionary 이니셜 라이저를 사용하는 대부분의 기능에 대한 얘기를 무슨 새로운 C#을 6.0
하나에 대한 이야기를 많이하고 그러나 우리는 컬렉션을 초기화 컬렉션 이니셜 라이저를 사용하고 대기하고 아주 잘사전 초기화 프로그램이 수집 초기화 프로그램에 추가 할 때 어떤 이점이 있습니까? 최근 과거에

Dictionary<int, string> myDict = new Dictionary<int, string>() { 
    { 1,"Pankaj"}, 
    { 2,"Pankaj"}, 
    { 3,"Pankaj"} 
}; 

같은 .NET 4.0도 Dictionary 및 .NET 4.5 (이전 버전에 대해 알고하지 마십시오)을 초기화 할 수있는 것은 그래서 사전 이니셜 라이저가 C#으로 무슨 말을하는거야 C#을 6.0, 거기에 새로운 무엇인가 6.0

+3

@DevEstacion 질문 제목은 "콜렉션과 사전 이니셜 라이저의 차이점"또는 "사전 이니셜 라이저가 콜렉션 이니셜 라이저에 추가하는 이점"을 "간단한 googleable 질문"과 구별 할 수 있습니다. – i3arnon

답변

72

수는 수 있습니다. 컬렉션 초기화 프로그램으로 사전을 초기화하는 것은 상당히 번거롭습니다. 특히 통사론적인 설탕으로 여겨지는 것을 위해.

사전 초기화가 훨씬 청소기입니다

var myDict = new Dictionary<int, string> 
{ 
    [1] = "Pankaj", 
    [2] = "Pankaj", 
    [3] = "Pankaj" 
}; 

이 초기화가 아니라 사전에 대한, 그들은 예를 List<T>에 대한 인덱서를 지원하는 모든 객체에 사용할 수 있습니다 더 중요한 :

var array = new[] { 1, 2, 3 }; 
var list = new List<int>(array) { [1] = 5 }; 
foreach (var item in list) 
{ 
    Console.WriteLine(item); 
} 

출력 :

1 
5 
3 
+12

그것은 같은 것이 아닙니다. 이전 버전은'Add' 메소드 (C#의 확장 메소드가 될 수 있음)를 호출하고 새로운 메소드는 인덱서를 호출합니다. 사전 결과는 사전과 동일 할 수도 있지만 새 메소드는 인덱서는 있지만 'Add' 메소드는 사용할 수 없습니다. –

+0

@PauloMorgado 물론. 그렇지 않으면 나는 제안하지 않았다. – i3arnon

+4

@ I3arnon, 아니야. 내가 질문과 당신의 대답을 읽을 때, 나는 그것이 같은 것으로 오해 될 수도 있다고 생각했다. 나는 당신의 대답을 강화하고있었습니다. –

2

새로운 것은 crea 팅 사전의 스타일이 방법

Dictionary<int, string> myDict = new Dictionary<int, string>() { 
    [1] = "Pankaj", 
    [2] = "Pankaj", 
    [3] = "Pankaj" 
}; 

<index> = <value>

폐기 :

Dictionary<int, string> myDict = new Dictionary<int, string>() { 
     $1 = "Pankaj", 
     $2 = "Pankaj", 
     $3 = "Pankaj" 
    }; 

A C# 6.0 Language Preview

에서 촬영 (코멘트에 명시된 바와 같이) 문자열 색인 회원 구문

$ operat을 이해하려면 또는 AreEqual 함수 호출을 살펴보십시오. Dictionary에 "Boolean"멤버가 없더라도 builtInDataTypes 변수에서 "$ Boolean"이라는 사전 멤버 호출을 확인할 수 있습니다. $ 연산자가 사전에 색인 된 구성원을 호출하므로 buildInDataTypes [ "Boolean"]를 호출하는 것과 같은 명시적인 구성원은 필요하지 않습니다.

+9

AFAIK $ 연산자가 존재하지 않습니다. 더 이상. – i3arnon

관련 문제