2012-06-16 2 views
1

이 같은 선언의 내 코드에서 Func을이 : 나는 내 코드에서 사용하기 위해 Func을의 매개 변수 인 INT 변수를 문자열 및 도달 할 수있는 방법사용 Func을 <T> 매개 변수

Func<string, int, bool> Filter { get; set; } 

?

+0

'필터'를 방법으로 생각하십시오. 그것은'string' 또는'int' 매개 변수에 대한 값을 가지고 있지 않습니다. 이러한 값은 메서드가 호출 될 때 전달됩니다. – alf

+0

Func에는 string 및 int * variables * 매개 변수가 없습니다. 문자열과 int * 값을 가지고 있습니다. 그 값을 제공하는 변수 (아마도 -는 리터럴 일 수 있습니다!)는 Func와는 관련이 없어야합니다. – AakashM

답변

4

매개 변수가 인 경우이 호출 될 때 ... 함수 내에서만 사용할 수 있습니다. 그래서 예를 들면 : 대리인이를 실행하고있는 동안 마찬가지로 값 5는 length 매개 변수 의 값이있는 동안

다음
foo.Filter = (text, length) => text.Length > length; 

bool longer = foo.Filter("yes this is long", 5); 

, 값 "예이 길다"는 text 매개 변수 의 값입니다을 실행 중입니다. 다른 때에는 의미가없는 개념입니다.

정말 성취하려는 것은 무엇입니까? 당신이 우리에게 더 많은 맥락을 줄 수 있다면, 우리는 당신을 더 잘 도울 수 있습니다.

+0

나는 내 클래스에있는 요소 중 일부를 필터링해야하는 사용자로부터 함수를 가져 오려고합니다. 각 요소는 String과 int로 구성됩니다. 문제는이 함수를 호출하는 동안 int 부분을 업데이트하기 위해이 func을 사용하려는 문자열 부분 만 있다는 것입니다. 정확한 방법은 아니지만 제한 사항을 기반으로하는 유일한 방법 인 것으로 알고 있습니다. –

+0

@YoniPlotkin : 죄송합니다. 아직도 진행 상황이 나에게 분명하지 않습니다. * int *를 취하는 함수는 그것을 업데이트 *해서는 안된다. 어쩌면 당신이 달성하고자하는 것에 대한 짧지 만 완전한 예를 제공 할 수 있다면 더 명확해질 것입니다. –

+0

불분명 함을 드려 죄송합니다. 설명 드리겠습니다. 구성 요소, 사용자 및 서버 클래스가 있습니다. 사용자 클래스는 다음과 유사합니다. 'public class Component { string Id {get; } int 상태 {get; } } ' 및 일부 기능 ... 사용자 클래스는 다음과 같습니다. 'public class User { string Id {get; } IDictionary 상태 {get; } IEnumerable RelevantComponents {get; } Func Filter {get; 세트; } }' –

4

당신은 익명의 방법을 사용할 수 있습니다

Filter = (string s, int i) => { 
    // use s and i here and return a boolean 
}; 

또는 표준 방법

public bool Foo(string s, int i) 
{ 
    // use s and i here and return a boolean 
} 

을하고이 방법으로 필터 속성을 지정할 수 있습니다 :

Filter = Foo; 
1

참조 이 샘플은 여기에 - http://www.dotnetperls.com/func

using System; 

class Program 
{ 
    static void Main() 
    { 
    // 
    // Create a Func instance that has one parameter and one return value. 
    // ... Parameter is an integer, result value is a string. 
    // 
    Func<int, string> func1 = (x) => string.Format("string = {0}", x); 
    // 
    // Func instance with two parameters and one result. 
    // ... Receives bool and int, returns string. 
    // 
    Func<bool, int, string> func2 = (b, x) => 
     string.Format("string = {0} and {1}", b, x); 
    // 
    // Func instance that has no parameters and one result value. 
    // 
    Func<double> func3 =() => Math.PI/2; 

    // 
    // Call the Invoke instance method on the anonymous functions. 
    // 
    Console.WriteLine(func1.Invoke(5)); 
    Console.WriteLine(func2.Invoke(true, 10)); 
    Console.WriteLine(func3.Invoke()); 
    } 
} 
+6

실제로 Invoke를 호출 할 필요는 없으며 단지'func1 (5)'만 할 수 있습니다. – R0MANARMY