[C#] 14일차 - 95. dynamic형을 사용하는 일반화 프로그램C#/C#200제2021. 2. 10. 18:43
Table of Contents
<T>는 사용자가 만든 클래스를 포함해서 어떠한 자료형도 올 수 있는데 이 자료들이 더하거나 비교할 수 있는 데이터인지 알 수 없기 때문에 컴파일시 에러메세지가 나옴,
이를 해결하기 위해 dynamic키워드를 사용함
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace A095_GenericMethodsUsingDynamic
{
class Program
{
static void Main(string[] args)
{
int[] a = { 10, 45, 32, 47, 85, 46, 93, 47, 50, 71 };
double[] b = { 0.1, 5.3, 6.7, 8.5, 4.9, 6.1 };
float[] f = { 1.2f, 5.3f, 7.8f, 6.1f, 3.4f, 8.8f };
decimal[] c = { 123, 783, 456, 234, 456, 738 };
PrintArray<int>("a[] :", a);
CalcArray<int>(a);
PrintArray<double>("b[] :", b);
CalcArray<double>(b);
PrintArray<float>("f[] :", f);
CalcArray<float>(f);
PrintArray<decimal>("c[] :", c);
CalcArray<decimal>(c);
}
// 일반화 메소드에서 where T:struct는 T에 값형만 올 수있다는 뜻.
private static void CalcArray<T>(T[] a) where T: struct
{
T sum = default(T);
T avg = default(T);
T max = default(T);
foreach(dynamic item in a)
{
if (max < item)
max = item;
sum += item;
}
avg = (dynamic)sum / a.Length;
Console.WriteLine("Sum = {0}, Average = {1}, Max = {2}", sum, avg, max);
}
private static void PrintArray<T>(string s, T[] a) where T : struct
{
Console.Write(s);
foreach (var item in a)
Console.Write(" {0}", item);
Console.WriteLine();
}
}
}
반응형
'C# > C#200제' 카테고리의 다른 글
[C#] 14일차 - 97. LinkedList 클래스를 활용한 프로그램 (0) | 2021.02.10 |
---|---|
[C#] 14일차 - 96. LinkedList의 구현 (0) | 2021.02.10 |
[C#] 14일차 - 94. 일반화 클래스(제네릭 클래스) (0) | 2021.02.10 |
[C#] 14일차 - 93. 일반화 메소드(제네릭 메소드) (0) | 2021.02.10 |
[C#] 13일차 - 92. 메소드 오버로딩 (0) | 2021.02.09 |
@반나무 :: 반나무_뿌리
3년차 WPF 개발자입니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!