回答編集履歴
1
ミス修正
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
|
28
|
+
Type parentType = task.GetType();
|
28
|
-
object member=parentType
|
29
|
+
object member=parentType.InvokeMember(info.Name, BindingFlags.GetField, null, task, null);
|
29
|
-
|
30
|
+
|
30
31
|
PropertyInfo[] infos = member.GetType().GetProperties();
|
31
32
|
foreach (PropertyInfo info in infos)
|
32
33
|
{
|