2013-08-08 2 views
0
나는이 라이브러리를 얻고있다

가 내부적으로 면도기보기에서 다음Func을 매개 변수로 사용하여 사전 개체를 호출하는 방법?

public MyClass<T> 
{ 
    public Dictionary<String, Func<T,String>> AttributesUsing{ get; set;} 
    public void setAttributesUsing(Action<Dictionary<String, Func<T, String>>> t) 
    { 
       AttributesUsing = new Dictionary<String, Func<T, String>>(); 
       t(AttributesUsing); 

    } 

} 

과 같은 이전의 개발자에 의해 개발, 우리는 그렇게

.... 
.... 

.setAttributesUsing(attr => 
{ 
    attr.Add("width", item => (item.ActualDays * 19).ToString()); 
}); 

.... 

문제가있는 것처럼 구성 요소를 호출 할 수 있습니다 그가 끝내지 않은 백엔드 코드는 어떻게 호출할까요?

내가 너무

m.AttributesUsing(item) 

처럼 T 객체를 전달하려고하지만 분명히 그 아무 이동 없습니다

foreach(T item in DataSource) 
{ 
     MyClass<T> m = new MyClass<T>() 
     m.AttributesUsing(???????) <---- what do i pass in here? 
} 

관련이 다음과 같은 작품이다. Dictionary 객체이기 때문에 "메서드처럼 사용할 수 없게"됩니다. 조금 혼란스러워.

감사합니다.

+0

당신은'사전 <문자열, Func을 >을 제공하는'액션 를'제공'어디'T' 클래스의 초기화에 제공 한 어떤이다 : 'MyClass에 m = 새 MyClass()'는 컴파일시에'T'를 지정하지 않았기 때문에 컴파일되지 않을 것입니다. –

+0

불행히도 "면도보기"라는 용어에 익숙하지 않습니다. 그러나 그 부분에 표시된 구문은 일반적인 C# 람다 함수처럼 보입니다. "??????"에 동일한 코드를 붙여 넣을 수는 없습니까? – Katana314

+0

@Liming 만약 당신의'foreach'에있는'T'가 앞서 언급 한 타입의 사전이라면, 당신은 그것을 인수로 넘길 수 없습니다. 메소드는 델리게이트를 기대합니다. 람다를보십시오 :'m.AttributesUsing (item => item.Clear()); ' –

답변

0

대리자 기능을 사용할 수 있습니까?

나는 당신이 원하는 것을 얻고 싶다면/내가 필요하다고 생각한다.

public delegate string readDictionary(T obj) 
{ 
    //do some stuff, read attributes 
    //return object attributes 
} 

그런 식으로 객체를 (좀) 및 전달이 arent 반환 된 속성) (attributesUsing 위해에서

0

신경 끄시 오는 얻는다. 알아 냈어. Func을 "는 MyClass에"너무 문자열을 반환하기 때문에, 난 그냥 "보류"최종 값

public Dictionary<String, String> Attributes; 

및 호출 코드에 그것을 통해 단지 루프 등

foreach(T item in DataSource) 
{ 
     MyClass<T> m = new MyClass<T>() 
     foreach (KeyValuePair<String, Func<T, String>> pair in m.AttributesUsing) 
     { 
      m.Attributes = new Dictionary<String, String>(); 
      m.Attributes.Add(pair.Key, pair.Value(item)); 
     } 
} 
처럼 호출 할 다른 속성을 선언

호출하는 동안 "T"를 전달하는 더 쉬운 방법이 있다고 생각했지만 그렇지 않은 것 같습니다.

덕분에 많이들

+0

괄호를 사용하는 것은 당신을 위해 충분하지 않습니까 ??? – Servy

+0

Servy, 나는 실제로 Dictionary 개체를 통해 루프를 돌리지 않고 그것을 수행 한 다음 쌍의 .Value에 대해 func <> 호출을 호출하는 방법이 있다고 생각했습니다. – Liming

+0

값 중 하나만 원하면 하나의 값만 호출하면됩니다. 모든 값에 대해 무언가를하고 싶다면 모든 값을 반복해야합니다. 개념적으로 그것을 피하는 것은 불가능합니다. LINQ를 사용하는 등의 기능을 호출하여 숨길 수는 있지만 반복이 후드에서 진행되지 않는다는 의미는 아닙니다. – Servy

관련 문제