2011-08-15 3 views
0

저는 공급자 패턴을 구현하고 프로젝트에서 사용하고있는 공급자를 만들었습니다. 특정 값에 대한 공급자 목록에서 속성에 대한 검색을 구현해야합니다. 나는 그 섭리를 사전에 우아한 방식으로 바꾸는 방법이 있는지 궁금해하고 있었다. 사전을 사용하면 값을 찾는 데 사용할 수 있습니다. 사전을 찾거나 기본 foreach 루프를 수행하는 대신 이런 종류의 시나리오를 처리하는 더 좋은 방법이있을 수 있습니다. 모든 도움과 크게 감사합니다. 예. 도움이 될 것입니다.ProviderCollection to Dictionary

감사합니다, DND

이 검색 코드를 작성하는 더 나은, 청소기 방법이 있나요 ??? 나는 John이 나를 보여준 것처럼 사전을 사용하려고 생각하고있었습니다. 어떻게 생각해?

var ProdNumVal = from p in xdoc.Root.Element("ClientOrderId").Elements() 
         where (string)p.Attribute("name") == "ProductNumber" 
         select (string)p.Value; 


     if (!string.IsNullOrEmpty(ProdNumVal.ToString())) 
     { 
      foreach (XMLProviderBase prov in Providers) 
      { 
       products = prov.ProductNumber.Split(';'); 
       foreach (string prod in products) 
       { 
        if (prod == ProdNumVal.FirstOrDefault()) 
         return prov; 
       } 
      } 
     } 

답변

0

System.Configuration.Provider.ProviderCollection에 대해 이야기 하시겠습니까? 아니면이 자체 제공자 컬렉션 클래스입니까?

 ProviderCollection pc = <initialize somehow>; 
     Dictionary<string, string> d = pc 
      .Cast<ProviderBase>() 
      .ToDictionary(pb => pb.Name, pb => pb.Description); 

ToDictionary()의 첫 번째 인수는 키를 선택하고, 제 2 인수의 선택 : 어떤 경우에

, 당신의 ProviderCollection 당신이 사전을 생성하기 위해 LINQ ToDictionary() 메소드를 사용할 수를 IEnumerable입니다 가치. 여기서는 예제 (이름은 ProviderBase가 요소 유형이라고 가정)의 이름/설명을 가져 오는 것 뿐이지 만 필요한 모든 값을 선택할 수 있습니다. 도움이

희망,

+0

존 - 당신은 당신의 가정에서 올바른, 내가 제공 패턴에 providercollection을 사용하고 있습니다. 사전을 작성하는 코드는 제가 찾고있는 것입니다. 감사합니다. 궁극적으로 generic 콜렉션이며 find 메소드가없는 providerscollection에 대한 검색을 시도하고 있습니다. 내가 원하는 것을 되찾기 위해이 코드를 작성했으나 추악하다. 어떻게 생각하니? 어떻게 다르게 할 수 있습니까? orig post에 추가 된 코드를 참조하십시오. - DND – DotNetDude

+0

안녕하세요 - 이제 조금 더 나은 정보를 얻으려고하는 것을 이해하고 있다고 생각합니다. 사전이 실제로 원하는 정보인지 확신 할 수 없습니다. 몇 가지 작업을 수행 할 수 있다면 좀 더 도움이 될 수 있습니다. 1) 샘플 XML을 약간 게시하십시오. 2) XMLProviderBase 및 Providers의 정의를 게시하십시오. – JohnD

+0

Ok John 좀 더 많은 코드로 게시물을 업데이트했습니다. – DotNetDude