回答編集履歴
5
追記
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
修正
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
修正
answer
CHANGED
@@ -98,7 +98,7 @@
|
|
98
98
|
}
|
99
99
|
```
|
100
100
|
|
101
|
-
### 追記
|
101
|
+
### 追記 IComparer<T> を使う場合(未検証)
|
102
102
|
|
103
103
|
```C#
|
104
104
|
var comparer = new Comparer(new { Choise = "", Count = 0 });
|
2
追記
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
修正
answer
CHANGED
@@ -69,7 +69,7 @@
|
|
69
69
|
).Compile();
|
70
70
|
|
71
71
|
var listType = typeof(List<>)
|
72
|
-
.MakeGenericType(
|
72
|
+
.MakeGenericType(itemType);
|
73
73
|
var sortMethod = listType.GetMethod("Sort", new[] { comparisonType });
|
74
74
|
|
75
75
|
foreach (var item in c)
|