답변:
간단한 배열에 대한 현재 선언 및 초기화 방법입니다.
string[] array = new string[2]; // creates array of length 2, default values
string[] array = new string[] { "A", "B" }; // creates populated array of length 2
string[] array = { "A" , "B" }; // creates populated array of length 2
string[] array = new[] { "A", "B" }; // created populated array of length 2
Linq ToArray()
확장 기능 과 같은 배열을 얻는 다른 기술이 IEnumerable<T>
있습니다.
또한 위의 선언에서 첫 번째 두 개 string[]
는 왼쪽의를 var
(C # 3+)로 바꿀 수 있습니다. 오른쪽의 정보는 적절한 유형을 유추하기에 충분하기 때문입니다. 배열 초기화 구문만으로는 컴파일러의 요구를 충족시키기에 충분하지 않으므로 세 번째 행은 표시된대로 작성해야합니다. 네 번째는 추론을 사용할 수도 있습니다. 그래서 당신이 전체 간결한 것에 빠져 있다면, 위의 내용은 다음과 같이 쓸 수 있습니다.
var array = new string[2]; // creates array of length 2, default values
var array = new string[] { "A", "B" }; // creates populated array of length 2
string[] array = { "A" , "B" }; // creates populated array of length 2
var array = new[] { "A", "B" }; // created populated array of length 2
var x = {}
배열 이니셜 라이저가 배열 이외의 다른 것을 생성 할 수 있다면 작동하지 않는 것이 합리적 이지만 그것이 무엇인지 알 수는 없습니다. 그래서 배열 이니셜 라이저는 언어 기능이라고 생각합니다. 함께 사용하면 new List<string> {"A", "B"}
다른 결과가 나옵니다.
표현식 인 C #의 배열 작성 구문 은 다음과 같습니다.
new int[3]
new int[3] { 10, 20, 30 }
new int[] { 10, 20, 30 }
new[] { 10, 20, 30 }
첫 번째에서, 크기는 음이 아닌 정수 값일 수 있으며 배열 요소는 기본값으로 초기화됩니다.
두 번째 크기는 크기가 일정해야하며 주어진 요소 수가 일치해야합니다. 주어진 요소에서 주어진 배열 요소 유형으로의 암시 적 변환이 있어야합니다.
세 번째 요소에서 요소는 암시 적으로 요소 유형으로 변환 가능해야하며 크기는 주어진 요소 수에서 결정됩니다.
네 번째 요소에서 배열 요소의 유형은 유형이있는 모든 주어진 요소 중 최상의 유형 (있는 경우)을 계산하여 추론됩니다. 모든 요소는 해당 유형으로 암시 적으로 변환 가능해야합니다. 크기는 주어진 요소의 수에서 결정됩니다. 이 구문은 C # 3.0에서 도입되었습니다.
선언에만 사용할 수있는 구문도 있습니다.
int[] x = { 10, 20, 30 };
요소는 내재적으로 요소 유형으로 변환 가능해야합니다. 크기는 주어진 요소의 수에서 결정됩니다.
올인원 가이드가 없습니다
C # 4.0 사양 섹션 7.6.10.4 "배열 생성 표현식"을 참조합니다.
Array.CreateInstance(typeof(int), 3)
!
"1,2,3,4".split(',')
.
new int[,] { { 3, 7 }, { 103, 107 }, { 10003, 10007 }, };
, 그래서에에 int[,,]
, int[,,,]
...
var data0 = new int[3]
var data1 = new int[3] { 1, 2, 3 }
var data2 = new int[] { 1, 2, 3 }
var data3 = new[] { 1, 2, 3 }
var data4 = { 1, 2, 3 }
컴파일 할 수 없습니다. int[] data5 = { 1, 2, 3 }
대신 사용하십시오 .
var data6 = new int[0]
var data7 = new int[] { }
var data8 = new [] { }
및 int[] data9 = new [] { }
컴파일 가능한 없습니다.
var data10 = { }
컴파일 할 수 없습니다. int[] data11 = { }
대신 사용하십시오 .
var
키워드로 지정할 수있는 표현식 만 인수로 전달할 수 있습니다.
Foo(new int[2])
Foo(new int[2] { 1, 2 })
Foo(new int[] { 1, 2 })
Foo(new[] { 1, 2 })
Foo({ 1, 2 })
컴파일 할 수 없다 Foo(new int[0])
Foo(new int[] { })
Foo({})
컴파일 할 수 없다Enumerable.Repeat(String.Empty, count).ToArray()
'카운트'번 반복되는 빈 문자열 배열을 만듭니다. 동일하지만 특별한 기본 요소 값으로 배열을 초기화하려는 경우. 참조 유형에주의하여 모든 요소는 동일한 객체를 참조합니다.
var arr1 = Enumerable.Repeat(new object(), 10).ToArray();
동일한 객체에 대한 10 개의 참조가 있습니다. 10 개의 고유 한 개체를 만들려면 사용 var arr2 = Enumerable.Repeat(/* dummy: */ false, 10).Select(x => new object()).ToArray();
하거나 유사 할 수 있습니다 .
var contacts = new[]
{
new
{
Name = " Eugene Zabokritski",
PhoneNumbers = new[] { "206-555-0108", "425-555-0001" }
},
new
{
Name = " Hanying Feng",
PhoneNumbers = new[] { "650-555-0199" }
}
};
사전 초기화 된 동일 (이 아닌 null
또는 다른 default
) 요소 의 고정 배열을 초기화 하려면 다음을 사용하십시오.
var array = Enumerable.Repeat(string.Empty, 37).ToArray();
또한 이 토론에 참여하십시오 .
아래는 클래스 정의입니다.
public class DummyUser
{
public string email { get; set; }
public string language { get; set; }
}
다음은 배열을 초기화하는 방법입니다.
private DummyUser[] arrDummyUser = new DummyUser[]
{
new DummyUser{
email = "abc.xyz@email.com",
language = "English"
},
new DummyUser{
email = "def@email.com",
language = "Spanish"
}
};
int[] array = new int[4];
array[0] = 10;
array[1] = 20;
array[2] = 30;
또는
string[] week = new string[] {"Sunday","Monday","Tuesday"};
또는
string[] array = { "Sunday" , "Monday" };
다차원 배열에서
Dim i, j As Integer
Dim strArr(1, 2) As String
strArr(0, 0) = "First (0,0)"
strArr(0, 1) = "Second (0,1)"
strArr(1, 0) = "Third (1,0)"
strArr(1, 1) = "Fourth (1,1)"
For Class initialization:
var page1 = new Class1();
var page2 = new Class2();
var pages = new UIViewController[] { page1, page2 };
객체 배열을 만들고 초기화하는 또 다른 방법입니다. 이것은 생성자를 사용한다는 점을 제외하고 @Amol이 위에 게시 한 예 와 비슷합니다 . 다형성이 뿌려져 저항 할 수 없었습니다.
IUser[] userArray = new IUser[]
{
new DummyUser("abc@cde.edu", "Gibberish"),
new SmartyUser("pga@lna.it", "Italian", "Engineer")
};
컨텍스트 클래스 :
interface IUser
{
string EMail { get; } // immutable, so get only an no set
string Language { get; }
}
public class DummyUser : IUser
{
public DummyUser(string email, string language)
{
m_email = email;
m_language = language;
}
private string m_email;
public string EMail
{
get { return m_email; }
}
private string m_language;
public string Language
{
get { return m_language; }
}
}
public class SmartyUser : IUser
{
public SmartyUser(string email, string language, string occupation)
{
m_email = email;
m_language = language;
m_occupation = occupation;
}
private string m_email;
public string EMail
{
get { return m_email; }
}
private string m_language;
public string Language
{
get { return m_language; }
}
private string m_occupation;
}
동적 배열을 만들 수도 있습니다. 즉, 배열을 만들기 전에 먼저 사용자에게 배열의 크기를 물어볼 수 있습니다.
Console.Write("Enter size of array");
int n = Convert.ToInt16(Console.ReadLine());
int[] dynamicSizedArray= new int[n]; // Here we have created an array of size n
Console.WriteLine("Input Elements");
for(int i=0;i<n;i++)
{
dynamicSizedArray[i] = Convert.ToInt32(Console.ReadLine());
}
Console.WriteLine("Elements of array are :");
foreach (int i in dynamicSizedArray)
{
Console.WriteLine(i);
}
Console.ReadKey();
그냥 메모
다음과 같은 배열 :
string[] array = new string[2];
string[] array2 = new string[] { "A", "B" };
string[] array3 = { "A" , "B" };
string[] array4 = new[] { "A", "B" };
다음으로 컴파일 됩니다.
string[] array = new string[2];
string[] array2 = new string[]
{
"A",
"B"
};
string[] array3 = new string[]
{
"A",
"B"
};
string[] array4 = new string[]
{
"A",
"B"
};
var
변수에 할당 할 수없는 이유를 설명 할 수 있습니까?