다음 코드 비트에 컬렉션 이니셜 라이저를 사용하고 싶습니다.
public Dictionary<int, string> GetNames()
{
Dictionary<int, string> names = new Dictionary<int, string>();
names.Add(1, "Adam");
names.Add(2, "Bart");
names.Add(3, "Charlie");
return names;
}
따라서 일반적으로 다음과 같아야합니다.
return new Dictionary<int, string>
{
1, "Adam",
2, "Bart"
...
그러나 이것에 대한 올바른 구문은 무엇입니까?
답변
var names = new Dictionary<int, string> {
{ 1, "Adam" },
{ 2, "Bart" },
{ 3, "Charlie" }
};
답변
구문은 약간 다릅니다.
Dictionary<int, string> names = new Dictionary<int, string>()
{
{ 1, "Adam" },
{ 2, "Bart" }
}
값의 튜플을 효과적으로 추가하고 있습니다.
참고로 컬렉션 이니셜 라이저에는 기본적으로 Add ()에 대한 인수 인 인수가 포함됩니다. 컴파일 타임 유형과 관련하여 편리한 함수에 대한 인수 인 인수가 포함되어 있습니다. 즉, 컬렉션이있는 경우 :
class FooCollection : IEnumerable
{
public void Add(int i) ...
public void Add(string s) ...
public void Add(double d) ...
}
다음 코드는 완벽하게 합법적입니다.
var foos = new FooCollection() { 1, 2, 3.14, "Hello, world!" };
답변
return new Dictionary<int, string>
{
{ 1, "Adam" },
{ 2, "Bart" },
...
답변
질문은 태그가 지정 c#-3.0
되어 있지만 완전성을 위해 Visual Studio 2015 (또는 Mono 4.0)를 사용하는 경우 C # 6에서 사용할 수있는 새로운 구문을 언급하겠습니다.
var dictionary = new Dictionary<int, string>
{
[1] = "Adam",
[2] = "Bart",
[3] = "Charlie"
};
참고 : 다른 답변에 언급 된 이전 구문은 더 나은 경우 여전히 작동합니다. 다시 말하지만 완전성을 위해 다음은 이전 구문입니다.
var dictionary = new Dictionary<int, string>
{
{ 1, "Adam" },
{ 2, "Bart" },
{ 3, "Charlie" }
};
주목해야 할 또 다른 종류의 멋진 점은 두 구문 모두 원하는 경우 마지막 쉼표를 남길 수 있다는 것입니다. 그러면 추가 행을 더 쉽게 복사 / 붙여 넣기 할 수 있습니다. 예를 들어 다음은 잘 컴파일됩니다.
var dictionary = new Dictionary<int, string>
{
[1] = "Adam",
[2] = "Bart",
[3] = "Charlie",
};
답변
좀 덜 장황한 구문을 찾고 있다면 다음 Dictionary<string, object>
과 같은 하위 클래스 (또는 유형이 무엇이든)를 만들 수 있습니다 .
public class DebugKeyValueDict : Dictionary<string, object>
{
}
그런 다음 이렇게 초기화하십시오.
var debugValues = new DebugKeyValueDict
{
{ "Billing Address", billingAddress },
{ "CC Last 4", card.GetLast4Digits() },
{ "Response.Success", updateResponse.Success }
});
다음과 같습니다.
var debugValues = new Dictionary<string, object>
{
{ "Billing Address", billingAddress },
{ "CC Last 4", card.GetLast4Digits() },
{ "Response.Success", updateResponse.Success }
});
이점은 말할 수있는 것과 같이 원하는 모든 컴파일 유형을 얻을 수 있다는 것입니다.
is DebugKeyValueDict
대신에 is IDictionary<string, object>
또는 나중에 키 또는 값의 유형을 변경합니다. razor cshtml 페이지에서 이와 같은 작업을 수행하는 경우보기가 훨씬 더 좋습니다.
덜 장황 할뿐만 아니라 원하는대로이 클래스에 추가 메서드를 추가 할 수 있습니다.
답변
다음 코드 예제에서 a Dictionary<TKey, TValue>
는 유형의 인스턴스로 초기화됩니다 StudentName
.
Dictionary<int, StudentName> students = new Dictionary<int, StudentName>()
{
{ 111, new StudentName {FirstName="Sachin", LastName="Karnik", ID=211}},
{ 112, new StudentName {FirstName="Dina", LastName="Salimzianova", ID=317}},
{ 113, new StudentName {FirstName="Andy", LastName="Ruth", ID=198}}
};
에서 MSDN
답변
예, 딕셔너리에서 컬렉션 이니셜 라이저를 사용할 수 있습니다.
Dictionary<int,string> dict = new Dictionary<int,string>();
dict.Add(1,"Mohan");
dict.Add(2, "Kishor");
dict.Add(3, "Pankaj");
dict.Add(4, "Jeetu");
다음과 같이 초기화 할 수 있습니다.
Dictionary<int,string> dict = new Dictionary<int,string>
{
{1,"Mohan" },
{2,"Kishor" },
{3,"Pankaj" },
{4,"Jeetu" }
};