2017-09-19 7 views
-1

プロパティオブジェクトの名前をキーとして、タイプオブジェクトのリストを値としてマップを作成したいとします。私の場合は複数のComboBoxを一度に初期化するジェネリックリストのマップを作成

私はマップを持っているしたいと思います:

Dictionary<string, List<Object1 Or 2>> objectToListofObj1Or2 = new Dictionary<string, List<Object1 Or 2>>(); 

私は連絡先や住所のリストのいずれかを持つことができます。

私は、私のマップを初期化する方法を持っている今、それはAbstractEntity、住所や連絡先のスーパークラスです:

public Dictionary<string, List<AbstractEntity>> InitializeMapping() 
    { 
     Dictionary<string, List<AbstractEntity>> objectToListContactCorrespondance1 = new Dictionary<string, List<AbstractEntity>>(); 
      objectToListContactCorrespondance1["CodeContactFactAchatExterne"] = ContactsFacturationAchatExterne.Cast<AbstractEntity>().ToList(); 
//my key is the property name, value is my list already created, here is a List of type Contact 
      objectToListContactCorrespondance1["CodeContactContractAchatExterne"] = ContactsContractualisationAchatExterne.Cast<AbstractEntity>().ToList(); 

//here a list of type Adress 
objectToListContactCorrespondance1["CodeAdresseContractAchatExterne"] = AdressesContractualisationAchatExterne.Cast<AbstractEntity>().ToList(); 

私は事前に対応するCodeAdressでrambComboBoxの多くを選択するには、このすべてを行いますか、 CodeContactは次のようにビューのリスト内にあります。

Dictionary<string, List<AbstractEntity>> mapping = InitializeMappingContact(); 
foreach (PropertyInfo propertyInfo in dataInit.GetType().GetProperties()) 
     { 
      if (mapping.ContainsKey(propertyInfo.Name) && (alreadyIn.Where(code => code == propertyInfo.Name).ToList().Count == 0)) 
      { 
       if (mapping[propertyInfo.Name].First().GetType() == typeof(Contact)) 
       { 
        Contact test = (Contact)mapping[propertyInfo.Name].First(); 
        propertyInfo.SetValue(dataInit, mapping[propertyInfo.Name].Count == 1 ? test.CodeContact : null, null); 
       } 
       else 
       { 
        Adresse test = (Adresse)mappingContact[propertyInfo.Name].First(); 
        propertyInfo.SetValue(dataInit, mappingContact[propertyInfo.Name].Count == 1 ? test.CodeAdresse : null, null); 
       } 
      } 
     } 

私のマップは動作します。私はFIRST()を追加しました。しかし、私のコンボボックスが「この行を選択したアレント(dataInitは私の初期化表示することができます):

propertyInfo.SetValue(dataInit, mappingContact[propertyInfo.Name].Count == 1 ? test.CodeContact : null, null); 

をそうでなければ、私は私のforeachとInitializeメソッドを使用しない場合、私は手動で行ずつそれをしなければなりません

dataInit.CodeAdresseContractAchatSVD = AdressesContractualisationAchatSVD.Count == 1 ? AdressesContractualisationAchatSVD.First().CodeAdresse : null; 

私がやりたい:このよう

dataInit."mapping[propertyInfo.Name]" = mappingContact[propertyInfo.Name].Count == 1 ? (Adress)mappingContact[propertyInfo.Name].First().CodeAdresse : null; 
+0

?コードをデバッグするとどうなりますか? – Clemens

+0

はなぜAbstractEntityワークを使用していないされて 'のように記述されるように

foreach (PropertyInfo propertyInfo in dataInit.GetType().GetProperties()) { if (mappingContact.ContainsKey(propertyInfo.Name) && (alreadyIn.Where(code => code == propertyInfo.Name).ToList().Count == 0)) { if (mappingContact[propertyInfo.Name].FirstOrDefault() != null) { if (mappingContact[propertyInfo.Name].First().GetType() == typeof(Contact)) { Contact test = (Contact)mappingContact[propertyInfo.Name].First(); propertyInfo.SetValue(dataInit, mappingContact[propertyInfo.Name].Count == 1 ? test.CodeContact : null, null); } else { Adresse test = (Adresse)mappingContact[propertyInfo.Name].FirstOrDefault(); propertyInfo.SetValue(dataInit, mappingContact[propertyInfo.Name].Count == 1 ? test.CodeAdresse : null, null); } } } } 
CalC

+0

私のテストタイプが間違っている可能性があります。マッピング[propertyInfo.Name] .FIRST()。GetType()== typeof(Contact)または対応するタイプとしてリストを作成する –

答えて

-1

私は、マップ内のリストがnullではなかったかどうかを確認し、その後、私は私のリストの種類を得ることができました:

0123ノート、 `マッピング[propertyInfo.Name] .GetType()== typeof演算(お問い合わせ)`より良いマッピングは[propertyInfo.Name] Contact`
関連する問題