2009-10-11 2 views
1

쿼리 문자열 매개 변수를 사용하여 URL을 작성하는 클래스가 있습니다. 이 클래스에는 클래스 속성과 UrlNew()에서 작성된 전체 URL을 반환하는 Url() 메서드와 속성 중 하나의 값을 바꾸기위한 매개 변수로 조건자를 전달할 수있는 메서드가 있습니다. . 자, 두 개의 술어 인 두 개의 매개 변수를 사용하려면이 함수를 수정해야합니다. 어떻게해야합니까? 나는 술어의 목록으로 메소드의 매개 변수를 수정 시도했지만 아마 바로 뭔가를하고 있지 않다 :함수 매개 변수에 둘 이상의 술어를 사용합니까?

public static string Url() (Action<LGUrlBuilder> predicate) 
    { 
     var instance = new LGUrlBuilder(); 
     if (predicate != null) predicate(instance); 
     return instance.BuildUrl(); 
    } 

내 NEW UrlNew() 메소드는 다음과 같습니다

내 OLD UrlNew() 메서드는이처럼 보였다 :

public static string UrlNew(List<Action<LGUrlBuilder>> predicateList) 
    { 
     var instance = new LGUrlBuilder(); 
     if (predicateList != null && predicateList.Count > 0) 
     { 
      foreach (Action<LGUrlBuilder> predicate in predicateList) 
      { 
       if (predicate != null) predicate(instance); 
      } 
     } 

     return instance.BuildUrl(); 
    } 

이 잘 컴파일하지만 난 ASPX에서 사용, 그것을 실행할 때 나에게이 오류 제공 :

CS1660: Cannot convert lambda expression to type 'System.Collections.Generic.List<System.Action<public_site.Library.LG.LGUrlBuilder>>' because it is not a delegate type 

저는 C# 초보자이며 뭔가 잘못하고 있다고 확신합니다. 어떤 조언이 도움이 될 것입니다. 감사!

+0

그냥 말 : 행동은 * 술어가 아니므로 매개 변수 이름을 더 적절한 것으로 변경하는 것이 좋습니다. – Groo

답변

5

함수 자체를 수정하지 마십시오.

UrlNew(x => { func1(x); func2(x); }); 

을하지만 정말이 인수로 위임 인스턴스의 임의의 숫자을 수정하려고 할 경우 좋아 :이 같은 메서드 호출을 수정 좋아

public static void UrlNew(params Action<LGUrlBuilder>[] list) { 
    // ... do what you're already doing in the second snippet ... 
} 

당신은 그것을 호출 할 수

UrlNew(x => firstthing(), x => secondthing(x), thirdthing); 

사이드 노트 : Action<T>은 술어로 불리지 않습니다. 술어는 부울 값을 리턴합니다.

+0

덕분에, 구체적으로 어떻게 구현해야 하는지를 물어 보았습니다. 지금 시도해보십시오 ... –

+0

이것은 완전히 작동했습니다! 고마워. 예, 저는 인수 목록에 임의의 수의 인스턴스를 갖고 싶었습니다. –

0

2 개의 매개 변수를 허용하는 오버로드 된 Action<T1,T2> 대리자를 사용하는 방법은 어떻습니까? 부울 값을 예상하는 대신 술어를 사용하려는 경우 대신 Func<T1,T2,bool>을 사용하십시오.

+0

두 매개 변수에 제약을받지 않는 부작용과 비슷합니다. –

관련 문제