본문 바로가기
C#

C# 람다 Case2 - 반환형이 델리게이트 리턴 메서드 대체

by 따봉이 2021. 12. 14.
728x90
반응형
using System;

void Foo<T>(T x) { }
void Bar<T>(Action<T> a) { }

//Bar (x => Foo (x));     // What type is x?
Bar((int x) => Foo(x)); // fix
Bar<int>(x => Foo(x));   // Specify type parameter for Bar
Bar<int>(Foo);            // As above, but with method group;
using System;

int cnt = 0;
Func<int> test = () => cnt++;
Console.WriteLine(test());           // 0
Console.WriteLine(test());           // 1
Console.WriteLine(cnt);                // 2

int factor = 2;
Func<int, int> multiplier = n => n * factor;
factor = 10;
Console.WriteLine(multiplier(3));           // 30
using System;

Func<int> test = Test();
Console.WriteLine(test());      // 0
Console.WriteLine(test());      // 1

static Func<int> Test() // 반환형이 델리게이트
{
    int cnt = 0;
    return () => cnt++;      // 리턴은 메서드여야 하는데 람다식으로 대체
}
using System;
//Func<int, int> multiplier = static n => n * 2;
int factor = 2;
Func<int, int> multiplier = static n => n * factor;  // will not compile
Console.WriteLine(multiplier(3));        // 6
* 부작용이 있는지 확인하려 할 때 static을 붙여서 사용하면 된다(제대로 이해한 게 맞는지 파악이 안됨)
728x90
반응형

댓글