728x90
반응형
1. where
제네릭을 사용하여, 두 값의 크기를 비교하는 함수를 구현한다.
public static T Max<T>(T item1, T item2)
{
if (item1.CompareTo(item2) > 0) {
return item1;
}
return item2;
}
모든 타입이 CompareTo 메서드를 지원하는 것은 아니다.
Int32, double 같은 숫자는 IComparable을 구현하여 CompareTo 메서드를 사용할 수 있지만,
Object는 CompareTo 메서드를 지원하지 않는다.
CompareTo 부분에 에러가 발생!
public static T Max<T>(T item1, T item2) where T : IComparable
{
if (item1.CompareTo(item2) > 0) {
return item1;
}
return item2;
}
T에 입력된 수 있는 타입의 조건을 where를 사용해 제한할 수 있다.
T타입은 IComparable을 상속받은 타입이라는 조건을 준다.
int a = Max<int>(1, 3);
object a = Max<object>(1, 3); //에러발생!!
object는 IComparable을 상속받지 않으므로 Max함수를 호출할 수 없다.
제약조건으로 인터페이스나 클래스가 올 수 있고, 아래와 같이 특별한 제약조건을 줄 수 있다.
where T : struct // T는 값 형식만 가능하다.
where T : class // T는 참조 형식만 가능하다.
2. default
기본값을 반환한다.
default operator
Console.WriteLine(default(int)); // output: 0
Console.WriteLine(default(object) is null); // output: True
default literal
T[] InitializeArray<T>(int length, T initialValue = default)
{
if (length < 0)
{
throw new ArgumentOutOfRangeException(nameof(length), "Array length must be nonnegative.");
}
var array = new T[length];
for (var i = 0; i < length; i++)
{
array[i] = initialValue;
}
return array;
}
Display(InitializeArray<int>(3)); // output: [ 0, 0, 0 ]
Display(InitializeArray<bool>(4, default)); // output: [ False, False, False, False ]
728x90
반응형
'C#' 카테고리의 다른 글
C#] LINQ to XML(XDocument) vs XML DOM(XmlDocument) (0) | 2022.01.04 |
---|---|
C#] Value type은 어디에 저장되는가? Stack or Heap?? (0) | 2021.12.24 |
C#] 값 형식 VS 참조 형식 (0) | 2021.12.16 |
IEnumerable vs ICollection vs IList 차이점 (0) | 2021.12.02 |
C#] LINQ 쿼리 키워드 let (0) | 2021.11.05 |
댓글