2011-08-15 69 views
0

我已經實現了提供者模式並創建了我在我的項目中使用的提供者集合。 我需要針對特定​​值的提供商列表中的屬性實施搜索。我想知道是否有一種方法可以將providercollection以優雅的方式轉換爲字典?用字典我可以使用find來匹配值。尋找一本詞典,或者有更好的方法來處理這種情況,而不是做一個基本的foreach循環。所有的幫助和極大的讚賞。一個例子。會有幫助。ProviderCollection到詞典

感謝, DND

有沒有寫這個搜索代碼更好,更清潔的方式???我正在考慮使用一本字典,就像約翰在下面給我看的那樣。你怎麼看?

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是一個IEnumerable,你可以使用LINQ ToDictionary()方法來生成詞典:

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

的第一個參數來ToDictionary()選擇鍵,第二ARG選擇價值。在這裏,我只是抓住一個例子的名稱/描述(假設ProviderBase是元素類型),但你可以選擇你需要的任何值。

希望幫助,

約翰

+0

約翰 - 你在你的假設是正確的,我正在使用供應商模式providercollection。你的代碼來創建一本字典是我正在尋找,謝謝。最終看到我試圖對提供程序集合進行搜索,這是一個通用集合,並且沒有查找方法。我寫了這段代碼來找回我想要的東西,但它很醜,你怎麼看?你會如何改變它?查看添加到orig post的代碼。 - DND – DotNetDude

+0

嗨 - 現在我想我理解你在尋找更好的東西,而且我不確定字典真的是你想要的。如果你可以做幾件事情,我可以提供更多幫助:1)發佈一些示例XML 2)發佈XMLProviderBase和Providers的定義。 – JohnD

+0

好的約翰我用更多的代碼更新了這篇文章。 – DotNetDude