Generic Collection



사용자 정의 클래서 Customer 로 컬렉션 객체를 생성과 동시에 초기화 하는 예제.
컬렉션 객체를 DataGridView 에 출력할 때 ToList 메소드를 사용하지 않아도 된다.

// 컬렉션 객체 생성과 동시에 초기화
//    - collection initializer 사용
List myCustomer = new List()
{
    new Customer() {CustomerName="홍길동", Age = 10, EmailAddress = "se"},
    new Customer() {CustomerName="홍길동2", Age = 20, EmailAddress = "se2"},
    new Customer() {CustomerName="홍길동3", Age = 30, EmailAddress = "se3"},
    new Customer() {CustomerName="홍길동4", Age = 40, EmailAddress = "se4"},
    new Customer() {CustomerName="홍길동5", Age = 50, EmailAddress = "se5"},
    new Customer() {CustomerName="홍길동6", Age = 60, EmailAddress = "se6"},
    new Customer() {CustomerName="홍길동7", Age = 70, EmailAddress = "se7"}
};

// 얻은 리스트(컬렉션)를 Grid 에 출력
//   - 컬렉션은 ToList()를 사용하지 않아도 된다.
dataGridView1.DataSource = myCustomer;









Anonymous Type (역명타입) var



익명 타입은 선언과 동시에 초기화 해줘야 한다. Java 에도 익명 타입이 존재 한다. .NET 의 익명 타입이  Java 의 익명 타입과 다른점은 익명 타입이 처음에 한번 임의 타입으로 결정 되면 더이상 다른 타입으로 변경 불가능 하다.

// anonymouse type : var 는 선언과 동시에 초기화 해야 한다.
// java 의 var 와 차이점
//   - 한번 선언된 var 는 고정된다.
var num = 10;

// 예제2
List myCustomer = new List()
{
    new Customer() {CustomerName="홍길동",  Age = 10, EmailAddress = "se",  Title="사원"},
    new Customer() {CustomerName="홍길동2", Age = 20, EmailAddress = "se2", Title="사원"},
    new Customer() {CustomerName="홍길동3", Age = 30, EmailAddress = "se3", Title="사원"},
    new Customer() {CustomerName="홍길동4", Age = 40, EmailAddress = "se4", Title="사원"},
    new Customer() {CustomerName="홍길동5", Age = 50, EmailAddress = "se5", Title="사원"},
    new Customer() {CustomerName="홍길동6", Age = 60, EmailAddress = "se6", Title="사원"},
    new Customer() {CustomerName="홍길동7", Age = 70, EmailAddress = "se7", Title="사원"}
};

// c는 컬렉션의 타입에 의존
// C# 3.0 에 추가된 문법은 같이 쓰인다.
//    - Sum 은 Extention Method
int num2 = myCustomer.Sum(c => c.Age);
MessageBox.Show(num2.ToString());

// LINQ 의 사용
// in 뒤에는 컬렉션(하나의 타입을 담고 있는)이 온다. 그렇지 않다면 컴파일 에러
// select new 는 특정 컬럼만 빼오는 것
// 필드는 링큐로 받았을 때 표현이 안된다.
var query = from cus in myCustomer
                  where cus.Age > 20
                  // select cus ;
                 select new { cus.CustomerName };
dataGridView1.DataSource = query.ToList();










Func



Func 는 일종의 델리게이트 이다.
델리게이트 처럼 미리 메소드의 시그내처대를 선언해 주지 않아도 된다.

// Func : 델리게이트 이다.
private void button3_Click(object sender, EventArgs e)
{
    // 생성
    Func myF = new Func(MyMehtod);

    // 호출
    int num = myF(10);
    MessageBox.Show(num.ToString());

    // 호출2
    // 람다 식은 func 안에서만 사용 가능하다.
    Func myF2 = new Func(p => p + 1);
    int num2 = myF2(10);
    MessageBox.Show(num2.ToString());
}

// func로 연결할 메소드
public int MyMehtod(int i)
{
    return i + 100;
}







Posted by six605
,