2011-08-15 10 views
0

私はプロバイダパターンを実装して、私が自分のプロジェクトで使用しているプロバイダを作成しました。 私は特定の値に対して持っているプロバイダのリスト内のプロパティに対して検索を実装する必要があります。私は、エレガントな方法で辞典を辞書に変換する方法があるのだろうかと思っていましたか?辞書では、値を一致させるために検索を使用することができます。辞書を探していたり​​、基本的なforeachループを実行する代わりに、この種のシナリオを処理するためのより良い方法があります。すべての助けと非常に感謝します。 Ex。助けになるだろう。ProviderCollection to Dictionary

おかげで、 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 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