(répétées de here)
Première - Notez que vous pouvez ajouter constructeurs (et autre code) aux classes WCF - vous avez juste besoin de le faire dans une classe partielle (et laisser le code généré seul).
Il semble que le type des éléments de la liste doit être modifié - nous ne pouvons donc pas simplement lancer. La réflexion est une option, mais elle est lente. Puisque vous utilisez 3.5, nous pouvons peut-être écrire un Expression
pour le faire pour nous de manière plus efficace ... le long these lines, mais en utilisant la seconde classe aussi:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
static class Program
{
class Foo
{
public int Value { get; set; }
public override string ToString()
{
return Value.ToString();
}
}
class Bar : Foo {}
static void Main()
{
List<Foo> foos = new List<Foo>();
for (int i = 0; i < 10; i++) foos.Add(new Foo { Value = i });
List<Bar> bars = foos.ConvertAll<Bar>(Clone<Foo, Bar>);
}
public static TTo Clone<TFrom, TTo>(this TFrom obj) where TTo : TFrom, new()
{
return ObjectExtCache<TFrom, TTo>.Convert(obj);
}
static class ObjectExtCache<TFrom, TTo> where TTo : TFrom, new()
{
private static readonly Func<TFrom, TTo> converter;
static ObjectExtCache()
{
ParameterExpression param = Expression.Parameter(typeof(TFrom), "in");
var bindings = from prop in typeof(TFrom).GetProperties()
where prop.CanRead && prop.CanWrite
select (MemberBinding)Expression.Bind(prop,
Expression.Property(param, prop));
converter = Expression.Lambda<Func<TFrom, TTo>>(
Expression.MemberInit(
Expression.New(typeof(TTo)), bindings), param).Compile();
}
public static TTo Convert(TFrom obj)
{
return converter(obj);
}
}
}
Est-ce que WCF ne génère pas de classes _partial_ dans le code proxy? –
À un autre coup d'œil, vous n'avez pas dit si DerivedClass est uniquement une extension fonctionnelle au-dessus de la base ou si elle doit être une structure de données différente de celle suggérée par l'exemple de code. À mon humble avis, dans le deuxième cas, "conversion" n'a pas de sens. –