[C#] C #의 조건 자 대리인

나에게 설명해 줄 수 있습니까?

  • 술어 위임이란 무엇입니까?
  • 술어를 어디에서 사용해야합니까?
  • 술어를 사용할 때 모범 사례가 있습니까?

기술적 인 소스 코드가 인정 될 것이다.



답변

술어는 반환 함수 truefalse. 술어 대리자는 술어에 대한 참조입니다.

그래서 기본적 술어 대표는 함수가 반환에 대한 참조 true또는 false. 술어는 값 목록을 필터링하는 데 매우 유용합니다. 여기 예가 있습니다.

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<int> list = new List<int> { 1, 2, 3 };

        Predicate<int> predicate = new Predicate<int>(greaterThanTwo);

        List<int> newList = list.FindAll(predicate);
    }

    static bool greaterThanTwo(int arg)
    {
        return arg > 2;
    }
}

이제 C # 3을 사용하는 경우 람다를 사용하여 술어를보다 깔끔하게 표현할 수 있습니다.

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<int> list = new List<int> { 1, 2, 3 };

        List<int> newList = list.FindAll(i => i > 2);
    }
}


답변

c # 2 및 c # 3과 관련하여 Andrew의 대답에서 앞서서 … 일회 검색 기능을 위해 인라인으로 수행 할 수도 있습니다 (아래 참조).

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<int> list = new List<int> { 1, 2, 3 };

        List<int> newList = list.FindAll(delegate(int arg)
                           {
                               return arg> 2;
                           });
    }
}

도움이 되었기를 바랍니다.


답변

부울을 반환하는 대리인입니다. 필터링 목록에서 많이 사용되지만 원하는 곳 어디에서나 사용할 수 있습니다.

List<DateRangeClass>  myList = new List<DateRangeClass<GetSomeDateRangeArrayToPopulate);
myList.FindAll(x => (x.StartTime <= minDateToReturn && x.EndTime >= maxDateToReturn):


답변

여기 에 술어에 대한 좋은 기사가 있지만 .NET2 시대의 기사이므로 람다 식에 대한 언급은 없습니다.


답변

술어 위임이란 무엇입니까?

1) 술어는 true 또는 false를 반환하는 기능으로,이 개념은 .net 2.0 프레임 워크로 제공됩니다. 2) 람다 식 (=>)과 함께 사용 중입니다. 일반 유형을 인수로 사용합니다. 3) 술어 함수를 정의하고 다른 함수에 매개 변수로 전달할 수 있습니다. 4) 특별한 경우입니다 Func. 단 하나의 매개 변수 만 가져오고 항상 bool을 반환합니다.

C # 네임 스페이스에서 :

namespace System
{
    public delegate bool Predicate<in T>(T obj);
}

시스템 네임 스페이스에 정의되어 있습니다.

Predicate Delegate를 어디에서 사용해야합니까?

다음과 같은 경우 Predicate Delegate를 사용해야합니다.

1) 일반 컬렉션에서 항목을 검색합니다. 예 :

var employeeDetails = employees.Where(o=>o.employeeId == 1237).FirstOrDefault();

2) 코드를 단축하고 true 또는 false를 반환하는 기본 예 :

Predicate<int> isValueOne = x => x == 1;

이제 위의 술어를 호출하십시오.

Console.WriteLine(isValueOne.Invoke(1)); // -- returns true.

3) 익명 메소드를 다음과 같이 술어 대리자 유형에 지정할 수도 있습니다.

Predicate<string> isUpper = delegate(string s) { return s.Equals(s.ToUpper());};
    bool result = isUpper("Hello Chap!!");

술어에 대한 모범 사례가 있습니까?

술어 대신 Func, Lambda Expressions 및 Delegates를 사용하십시오.


답변

술어 기반 검색 메소드는 메소드 대리자 또는 람다 표현식이 주어진 요소가 “일치”하는지 여부를 결정할 수있게합니다. 술어는 단순히 객체를 수락하고 true 또는 false를 반환하는 델리게이트입니다. public delegate bool Predicate (T object);

   static void Main()
        {
            string[] names = { "Lukasz", "Darek", "Milosz" };
            string match1 = Array.Find(names, delegate(string name) { return name.Contains("L"); });
            //or
            string match2 = Array.Find(names, delegate(string name) { return name.Contains("L"); });
            //or
            string match3 = Array.Find(names, x => x.Contains("L"));


            Console.WriteLine(match1 + " " + match2 + " " + match3);     // Lukasz Lukasz Lukasz
        }
        static bool ContainsL(string name) { return name.Contains("L"); }


답변

VB 9 (VS2008) 인 경우 술어는 복잡한 함수일 수 있습니다.

Dim list As New List(Of Integer)(New Integer() {1, 2, 3})
Dim newList = list.FindAll(AddressOf GreaterThanTwo)
...
Function GreaterThanTwo(ByVal item As Integer) As Boolean
    'do some work'
    Return item > 2
End Function

또는 표현식이 하나만있는 한 술어를 람다로 작성할 수 있습니다.

Dim list As New List(Of Integer)(New Integer() {1, 2, 3})
Dim newList = list.FindAll(Function(item) item > 2)