2017-06-07 6 views
0

に辞書のプロパティを使用することが可能で、次のように、私は、結果のリストを取得:サードパーティ製のプログラムから.NET

+--------+-----------+-------------+ 
+ Name + Property + Prop. value + 
+--------+-----------+-------------+ 
+ foo + prop1 + value1  + 
+--------+-----------+-------------+ 
+ foo + prop2 + value2  + 
+--------+-----------+-------------+ 

それらのダースのプロパティとそれぞれがあることか存在しない可能性があります。

目的は、これらから.NETオブジェクトを作成することです。

は今、私は、オブジェクトを移入するためにLINQを使用して(申し訳ありませんが、VBを、それは非常に簡単です):

New myClass With { 
.myprop1 = (From o In query.rows where o.name = 'foo' and o.col(1) = 'prop1' select o.col(2)).FirstOrDefault 
... 
.myprop12 = (From o In query.rows where o.name = 'foo' and o.col(1) = 'prop12' select o.col(2)).FirstOrDefault 

だから私は12回のコードの基本的に同じラインを持っています。私はそれを簡素化したいと思います。

私は心の中で私が

myprop1 <-> prop1 
.... 
myprop12 <-> prop12 

を定義し、これをループできDictionary(Property, String)、のようなものを持っています。 私はそれを行う方法を考え出していません。これは可能ですか?このような割り当てをあまり退屈にする方法はありますか?

+1

これは?あなたの質問は何ですか? :) –

+0

だから、C#タグは... – dcg

+0

@dcgで完全なコードを提供しています...正直なところ、何らかの種類の区切り文字に基づいてテキストファイルを解析するライブラリが数十あります(あなたのケースでは'--'や' - + 'など)があります。 – HimBromBeere

答えて

0

申し訳ありませんが、私は(私はこれをテストしていませんが、それは閉じshouldbe ...)

myClass foo = new myClass(); 

var fields = from o in query.rows 
      where o.name == "foo" 
      select new {Property=o.col(1), Value = o.col(2) }; 

foreach(var prop in foo.GetType().GetProperties()) 
{ 
     var fld = fields.FirstOrDefault(f=>f.Property == prop.Name); 
     if (fld != null) 
       prop.SetValue(foo, fld.Value); 
} 

注... C#でこれを実行する必要がありますするつもりだ、これは、プロパティことを前提としてい名前はmyClassはフィールド名と同じですが、明らかにそうではありません。マッピングは、おそらく手動で作成しなければならない辞書によって処理されるのが最善です。

var FieldByProperty = new Dictionary<string, string>(); 

FieldByProperty .Add["myprop1", "prop1"); 
FieldByProperty .Add["myprop2", "prop2"); 
// : 

foreach(var prop in foo.GetType().GetProperties()) 
{ 
     var fldName = FieldByProperty[prop.Name]; 
     var fld = fields.FirstOrDefault(f=>f.Property == fldName); 
     if (fld != null) 
      prop.SetValue(foo, fld.Value); 
} 
関連する問題