2
4

3 に答える 3

2

私が解決した解決策は、リフレクションを使用してEnumerable.Cast<>メソッドを呼び出し、結果のコレクションをIEnumerable<object>正しいIEnumerable<>型にキャストすることでした。この質問への答えからアイデアを得ました: Convert IEnumerable to IEnumerable<T> when T are not known until runtime。パフォーマンスの低下はほとんどないようです。

したがって、完全な答えは次のようになります。

object ConvertCollection(object from, Type fromType, Type toType, Converter converter)
{
    var partialResult = ((IEnumerable<object>)from).Select(converter);
    var castMethod = typeof(Enumerable).GetMethod("Cast").MakeGenericMethod(toType);
    return castMethod.Invoke(null, new[] { partialResult });
}
于 2013-07-16T08:56:57.460 に答える
0

たぶん、このようなものですか?

IEnumerable<TTo> ConvertCollection<TFrom,TTo>(object from, Converter converter)
{
    return ((IEnumerable<TFrom>)from).Select(a=>(TTo)converter(a)).ToList();
}

次に、単にそれを呼び出します:

ConvertCollection<A,B>(new List<A>() { new A() }, AToBConverter);
于 2013-07-11T16:10:17.510 に答える