출처: https://blockdmask.tistory.com/317 [개발자 지망생]
안녕하세요. BlockDMask 입니다.
오늘은 가변인자 매개변수 params 키워드에 대해서 알아보도록 하겠습니다.
날씨가 오락가락하네요.
1. C# params 가변 인자 매개변수란?
▼ C# params 설명과 기능
: 우리가 함수의 매개변수를 넘길때 1,2,3개 이렇게 개수를 지정해주었던 것과 달리, params 키워드를 사용하면 개수의 제한 없이 매개변수를 넘길 수 있습니다. (노올랍군요)
: 가변 인자 매개변수 = 개수가 변하는 인자들을 넘길 수 있는 매개변수.
▼ C# params 규칙
: 선언부에서 params 키워드는 타입 맨 앞에 와야합니다.
: 가변인자 매개변수를 선언할때는 [] 를 이용해서 1차원 배열로 선언해야합니다.
: 데이터 타입이 애매할때는 모든 클래스의 최상위 클래스인 object 클래스 배열로 해도 됩니다.
(object 클래스 예제는 아래 예제 2에 있습니다.)
: 호출부에서 각 매개변수는 쉼표로 구분을 해야합니다.
: 호출부에서 매개변수를 보내지 않아도 됩니다. 이 경우에는 길이가 0이 되고, 비어있는 매개변수가 됩니다.
▼ C# params 간단한 예제
선언 - public static void Add(params int[] mylist)
호출 - Add(1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 9, 7, 6, 5, 4, 4, 3, 2, 2, 1, 2, 2, 1, 2, 3, 4, 5, 6, 7) (완전 가능)
제가 일부러 params 키워드와 1차원 배열을 나타내는 [] 를 빨간색으로 강조했습니다.
다시한번 말씀드리지만, params는 데이터 타입 앞에 와야하고, 데이터 타입은 []을 이용한 1차원 배열 이어야 합니다.
2. C# params 가변 매개변수 예제1 (특정한 데이터 타입 지정)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
//C# params example. BlockDMask.
class _20190321_params1
{
public static void Add(params int[] myList)
{
int sum = 0;
//foreach example
foreach (int elem in myList)
{
Console.Write(elem.ToString() + " ");
sum += elem;
}
/* for loop example.
for(int i=0; i<myList.Length; ++i)
{
Console.Write(myList[i].ToString() + " ");
sum += myList[i];
}
*/
Console.WriteLine();
Console.WriteLine("params Length : " + myList.Length.ToString());
Console.WriteLine("params sum : " + sum.ToString());
Console.WriteLine();
}
static void Main(string[] args)
{
Console.WriteLine("[1] 매개변수 여러개");
Add(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
Console.WriteLine("[2] 매개변수 없음");
Add();
}
}
|
cs |
▲ params 예제1 결과
[1]을 보면 매개변수가 여러개일 때 1차원 배열 myList 에 들어가서 foreach, for 루프에서 잘 돌아가는걸 볼 수 있습니다.
[2]을 보면 매개변수를 넣지 않았을 때, lengh가 0이 나오는 것을 볼 수 있습니다.
3. C# params 가변 매개변수 예제2 (최상위 타입 object 지정)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
//C# params example. BlockDMask.
class _20190321_params2
{
public static void Mixed(params object[] myList)
{
Console.WriteLine("[Length] : " + myList.Length.ToString());
//------------------------------------------
Console.Write("[Print all] : ");
foreach (object elem in myList)
{
//모든 요소 출력.
Console.Write(elem.ToString() + " ");
}
Console.WriteLine();
//------------------------------------------
Console.Write("[string type] : ");
for (int i=0; i<myList.Length; ++i)
{
Type t = myList[i].GetType();
if (t.Equals(typeof(string)))
{
//string 타입과 같은것만 출력
Console.Write(myList[i].ToString() + " ");
}
}
Console.WriteLine();
//------------------------------------------
Console.Write("[int type] : ");
foreach (object elem in myList)
{
Type t = elem.GetType();
if (t.Equals(typeof(int)))
{
//int 타입과 같은것만 출력
Console.Write(elem.ToString() + " ");
}
}
Console.WriteLine();
}
static void Main(string[] args)
{
Mixed(1, "BlockDMask", 2, 3, 4, "C#", 11, "Example");
}
}
|
cs |
▲ params 예제2 결과
특정 데이터 타입을 보내기가 애매할때는 모든 클래스의 부모인 object 클래스 타입으로 넘기면 됩니다.
public static void Mixed(params object[] myList)
위와 같은 방식으로 넘기면됩니다.
'Unity > C#' 카테고리의 다른 글
[Unity] 카메라 장애물 회피 (0) | 2022.01.26 |
---|---|
Unity ParticleSystem Trigger모듈 (0) | 2022.01.21 |
Unity 3D 모바일 터치이펙트 만들기 (0) | 2021.12.08 |
async콜백 안에서 Unity API 사용하기 (0) | 2021.11.09 |
C# Enum Count 가져오는 방법 (0) | 2021.11.02 |