質問する
964 次
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 に答える