2009-05-18 4 views
73

누군가가 Func<int, string>이 무엇인지 설명 할 수 있는지, 그리고 몇 가지 명확한 예제와 함께 어떻게 사용되는지 궁금합니다.Func에 대한 설명

답변

123

위치 : 여기

는 사용의 예입니다? 나는 둘 사이의 차이점을 설명하기 위해 더 자세하게 설명되어 있지만, 도움이 될만한 delegates and events에 관한 페이지를 가지고 있습니다. 이 선언에서 해당 형태 인수 ( intstring)로 유형 매개 변수 ( TTResult)를 대체하여 특정 상황에서 어떤 의미인지 운동 -

Func<T, TResult> 그냥 일반적인 위임이다. Func<int, string> 함수 int 인수를 복용하고 string 반환을 대표하는 대리인이다, 즉

string ExpandedFunc(int x) 

: 나는 또한 혼동을 피하기 위해 이름을 변경했습니다.

Func<T, TResult>은 LINQ에서 투영과 술어 모두에 사용됩니다 (후자의 경우 TResult은 항상 bool 임). 예를 들어 Func<int, string>을 사용하여 일련의 정수를 문자열 시퀀스에 투영 할 수 있습니다. 일반적으로 관련 대표단을 만들 LINQ에서 사용되는람다 표현식 :

Func<int, string> projection = x => "Value=" + x; 
int[] values = { 3, 7, 10 }; 
var strings = values.Select(projection); 

foreach (string s in strings) 
{ 
    Console.WriteLine(s); 
} 

결과 :

Value=3 
Value=7 
Value=10 
+2

"즉, int 인수를 사용하여 문자열을 반환하는 함수를 나타내는 대리자입니다." 다른 사람들에게 혼란을 피하기 위해 나는 Func 이 아닌 Func 에 대해 이야기하고 있음을 분명히 할 것입니다. 제네릭 형식과 대리자를 이해했는지는 확실하지만 그렇지 않은 경우 Func 은 int 인수를 사용하여 문자열을 반환하는 함수에 kan을 위임합니다. –

+0

나중에 PC에 다시 돌아올 때 명확 해집니다. –

+8

Downvoters : 이유를 제공해주세요 ... –

22

int 하나를 매개 변수로 사용하고 string 값을 반환하는 대리인입니다. 당신은 일반적으로 대표단을 잘 알고

using System; 

class Program 
{ 
    static void Main() 
    { 
     Func<Int32, String> func = bar; 

     // now I have a delegate which 
     // I can invoke or pass to other 
     // methods. 
     func(1); 
    } 

    static String bar(Int32 value) 
    { 
     return value.ToString(); 
    } 
} 
+0

감사합니다. bar (1) 대신 func (1)을 쓰고 싶습니까? – zSynopsis

+1

예 했어요!수정 주셔서 감사! –

33

Func<int, string> int 타입을 먹고 문자열을 반환합니다. 그래서 int를 먹고 문자열을 반환합니까? 어때? ...

public string IntAsString(int i) 
{ 
    return i.ToString(); 
} 

거기에서 ints를 먹고 문자열을 반환하는 함수를 만들었습니다. 어떻게 사용합니까?

var lst = new List<int>() { 1, 2, 3, 4, 5 }; 
string str = String.Empty; 

foreach(int i in lst) 
{ 
    str += IntAsString(i); 
} 

// str will be "12345" 

별로 섹시하지 못하다는 것을 알고 있습니다. 그러나 그것은 많은 트릭이 기반이라는 간단한 생각입니다. 이제 Func을 대신 사용 해보자. 이 FNC 전화 (이러한 방법 참조 delegates라고한다)와 사용하는 대신에 대신에, 각 부재에 IntAsString 호출

Func<int, string> fnc = IntAsString; 

foreach (int i in lst) 
{ 
    str += fnc(i); 
} 

// str will be "1234512345" assuming we have same str as before 

는, I는 기준을 만들었다. (fnc는 ints를 취하고 문자열을 반환합니다).

이 예제는별로 섹시하지 않지만 유용한 기능과 대리인 및 간단한 설명 인 extension methods을 기반으로합니다.

내가 본이 재료에 대한 최고의 프라이머 중 하나는 here입니다. 그는 실제 사례가 훨씬 많습니다. :)

+4

나는이 설명이 마음에 든다. –

+0

@ Theherealnapster 나는 그것을 좋아하지만 나는 네 이름을 더 좋아한다. – BKSpurgeon