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

回答編集履歴

5

追記

2020/03/24 08:35

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -113,4 +113,15 @@
113
113
  return string.Compare(((dynamic)x).Choise, ((dynamic)y).Choise);
114
114
  }
115
115
  }
116
+ ```
117
+
118
+ ### 追記
119
+
120
+ ```C#
121
+ IComparer と同様ダミーが気持ち悪いですが、これでキャストできますね。
122
+
123
+ List<T> ListFromDynamic<T>(dynamic list, T dummy)
124
+ {
125
+ return (List<T>)list;
126
+ }
116
127
  ```

4

修正

2020/03/24 08:35

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -1,7 +1,7 @@
1
1
  匿名型と dynamic が入り混じり、共変性反変性の問題もあるので手ごわいと思います。
2
2
  何も考えず Comparison<T> を式木で組み立てて使いましたが、IComparer<T> の方がもしかすると簡単にできたかもしれません。
3
3
 
4
- 他のコードはともかく、できるところから dynamic を排除していくのをお勧めします。多用するものではありません。
4
+ 他のコードはともかく、できるところから dynamic を排除していくのをお勧めします。多用するものではありません。あと、匿名型を使う必然性も全く感じられません。これだけ再利用するのであれば普通に名前をつけたらいいと思います。
5
5
 
6
6
  ```C#
7
7
  using System;

3

修正

2020/03/24 04:01

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -98,7 +98,7 @@
98
98
  }
99
99
  ```
100
100
 
101
- ### 追記 ICompare<T> を使う場合(未検証)
101
+ ### 追記 IComparer<T> を使う場合(未検証)
102
102
 
103
103
  ```C#
104
104
  var comparer = new Comparer(new { Choise = "", Count = 0 });

2

追記

2020/03/24 03:41

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -96,4 +96,21 @@
96
96
  }
97
97
  }
98
98
  }
99
+ ```
100
+
101
+ ### 追記 ICompare<T> を使う場合(未検証)
102
+
103
+ ```C#
104
+ var comparer = new Comparer(new { Choise = "", Count = 0 });
105
+ item.result.Sort(comparer);
106
+
107
+ class Comparer<T> : IComparer<T>
108
+ {
109
+ public Comparer(T dummy) {}
110
+
111
+ public int Compare([AllowNull] T x, [AllowNull] T y)
112
+ {
113
+ return string.Compare(((dynamic)x).Choise, ((dynamic)y).Choise);
114
+ }
115
+ }
99
116
  ```

1

修正

2020/03/24 03:40

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -69,7 +69,7 @@
69
69
  ).Compile();
70
70
 
71
71
  var listType = typeof(List<>)
72
- .MakeGenericType(new{ Choise = "", Count = 0 }.GetType());
72
+ .MakeGenericType(itemType);
73
73
  var sortMethod = listType.GetMethod("Sort", new[] { comparisonType });
74
74
 
75
75
  foreach (var item in c)