teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

ミス修正

2016/10/11 02:43

投稿

Chironian
Chironian

スコア23274

answer CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  infosをforeachで枚挙する時、infoに対応するフィールドの値を取ってきます。
4
4
  それがクラスだったら、taskに行っている処理と同じ処理を再帰的に行います。
5
- それがコンテナだったら、cwtasksに行っている処理と同じ処理を行います。(ここは再帰しない方がいです。)
5
+ それがコンテナだったら、cwtasksに行っている処理と同じ処理を行います。(配列処理は再帰しない方が簡単と思ます。型が異なるのややこしくなりそうです。)
6
6
 
7
7
  イメージを示すため再帰を展開した形でポイントだけ書いてみました。(ビルドしてません。こんなに長いソースは確実にバグってますが、主旨は掴めると思います。)
8
8
 
@@ -10,10 +10,10 @@
10
10
  ```C#
11
11
  foreach (ChatWorkTaskClass task in cwtasks)
12
12
  {
13
- Type parentType = task.GetType();
14
13
  PropertyInfo[] infos = task.GetType().GetProperties();
15
14
  foreach (PropertyInfo info in infos)
16
15
  {
16
+ Type type=info.PropertyType ;
17
17
  if ((type.IsPrimitive) || (type == typeof(string)))
18
18
  {
19
19
  log += info.Name + "\t" + info.GetValue(task, null) + "\r\n";
@@ -24,9 +24,10 @@
24
24
  }
25
25
  else
26
26
  {
27
+ // 下記2行は、object member=info.GetValue(task, null);でも良いかも知れません。
27
- Type chiledType=info.PropertyType ;
28
+ Type parentType = task.GetType();
28
- object member=parentType .InvokeMember(info.Name, BindingFlags.GetField, null, task, null);
29
+ object member=parentType.InvokeMember(info.Name, BindingFlags.GetField, null, task, null);
29
- Type grandchildType = member.GetType();
30
+
30
31
  PropertyInfo[] infos = member.GetType().GetProperties();
31
32
  foreach (PropertyInfo info in infos)
32
33
  {