문제

누군가가 무엇을 설명 할 수 있는지 궁금합니다 Func<int, string> 몇 가지 명확한 예제와 함께 사용되는 방법입니다.

도움이 되었습니까?

해결책

일반적으로 대표에 익숙하십니까? 나는 페이지가있다 대표와 이벤트 두 사람의 차이점을 설명하는 데 더욱 적합하지만 그렇지 않으면 도움이 될 수 있습니다.

Func<T, TResult> 일반 대의원 일뿐입니다. 매개 변수를 입력하십시오 (T 그리고 TResult) 해당 인수를 입력하십시오 (int 그리고 string) 선언에서. 또한 혼란을 피하기 위해 이름을 변경했습니다.

string ExpandedFunc(int x)

다시 말해, Func<int, string> 기능을 취하는 함수를 나타내는 대의원입니다 int 논쟁과 반환 a string.

Func<T, TResult> 종종 예측과 사전 시대 (후자의 경우, TResult 항상 bool). 예를 들어 a를 사용할 수 있습니다 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

다른 팁

Func<int, string> int를 먹고 문자열을 반환합니다. 그렇다면 ints를 먹고 줄을 반환하는 것은 무엇입니까? 이건 어때 ...

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를 사용합시다.

Func<int, string> fnc = IntAsString;

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

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

각 멤버에서 intasstring을 호출하는 대신 FNC라는 참조를 만들었습니다 (이 방법에 대한 참조는 대표) 대신 사용했습니다. (FNC는 int를 먹고 문자열을 반환하십시오).

이 예는 그다지 섹시하지는 않지만, 당신이 볼 수있는 영리한 것들이 많은 기능, 대표 및 대의원 및 단순한 아이디어를 기반으로합니다. 확장 방법.

내가 본이 물건에 대한 최고의 프라이머 중 하나는 여기. 그는 훨씬 더 실제 예를 가지고 있습니다. :)

하나를 취하는 대표입니다 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();
    }
}

Func<int, string> int 값 매개 변수를 허용하고 문자열 값을 반환합니다. 다음은 추가 지원 방법이 불필요한 예입니다.

Func<int, string> GetDogMessage = dogAge =>
        {
            if (dogAge < 3) return "You have a puppy!";
            if (dogAge < 7) return "Strong adult dog!";

            return "Age is catching up with the dog!";
        };

string youngDogMessage = GetDogMessage(2);

참고 : func의 마지막 객체 유형 (예 :이 예제의 "문자열")은 functions return 유형입니다 (예 : 프리미티브에 국한되지 않지만 모든 객체). 그러므로, Func<int, bool, float> int 및 bool 값 매개 변수를 허용하고 플로트 값을 반환합니다.

Func<int, bool, float> WorthlessFunc = (intValue, boolValue) =>
        {
            if(intValue > 100 && boolValue) return 100;

            return 1;
        };
float willReturn1 = WorthlessFunc(21, false);
float willReturn100 = WorthlessFunc(1000, true);

HTH

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top