1

int 値のリストを適切な列挙値のリストに変換するために必要なこのメソッドがあります。

問題は、戻り値の型もジェネリックであるため、ジェネリック関数に戻り値の型を指定していないため、Select がオブジェクト型を返していることです。

    public static Tout Convert<Tout, Tin>(IList<Tin> reply)
    {
        Type resultListElementType = typeof(Tout).GetGenericArguments()[0];
        MethodInfo setEnumValueMethod = typeof(EnumUtils).GetGenericMethod("SetEnumValue", new Type[] { typeof(Tin) });
        MethodInfo setEnumValueGenericMethod = setEnumValueMethod.MakeGenericMethod(resultListElementType, typeof(Tin));
        Tout result = (Tout)(dynamic)reply.Select(v => setEnumValueGenericMethod.Invoke(null, new object[] { v })).ToList();
        return result;
    }

ジェネリック関数のシグネチャは次のとおりです

    public static Tout SetEnumValue<Tout, Tin>(Tin value)

ジェネリック関数の戻り値の型も設定できる方法はありますか?

4

1 に答える 1

0

あなたはすでにそれをやっています。にバインドTIntypeof(Tin)ます。問題は別の場所にあります:

Tout result = (Tout)(dynamic)reply.Select(v => setEnumValueGenericMethod.Invoke(null, new object[] { v })).ToList();

これにより、 が得られますList<object>。個々の値をそれぞれ正しい型にキャストします。

List<Tout> result = reply.Select(v => (Tout)(dynamic)setEnumValueGenericMethod.Invoke(null, new object[] { v })).ToList();

そして public static Tout Convert(IList reply) を変更します

 public static List<Tout> Convert<Tout, Tin>(IList<Tin> reply)
于 2012-12-15T10:22:23.023 に答える