0

我需要将一个对象的所有公共属性复制到另一个类型的另一个对象。Jon Skeet 创建的库MiscUtil包含 PropertyCopy 类,它非常适合我需要的东西,除了一件事。我在源对象中有一个属性需要转换为目标对象中的另一种类型(Guid => 字符串)。

来自 PropertyCopy 的部分代码:

if (!targetProperty.PropertyType.IsAssignableFrom(sourceProperty.PropertyType))
{
    //My specific case
    if (sourceProperty.PropertyType == typeof(Guid) && targetProperty.PropertyType == typeof(string))
    {
        //Expression.Bind(targetProperty, [--Convert Guid to string expression??--]);
    }
    else
    {
        throw new ArgumentException("...");
    }                              
}

那么是否可以创建一个表达式来将源属性的转换绑定到目标?

4

2 回答 2

0

我认为

Expression.Bind(targetProperty, (Expression<Func<Guid,string>>) (v=>v.ToString()));

会工作...

于 2012-10-19T20:06:36.460 回答
0

下面的代码在将 Guid 绑定到目标属性之前将其转换为字符串:

if (sourceProperty.PropertyType == typeof(Guid) && targetProperty.PropertyType == typeof(string))
{
    Expression callExpr = Expression.Call(Expression.Property(sourceParameter, sourceProperty), typeof(Guid).GetMethod("ToString", new Type[] { }));
    bindings.Add(Expression.Bind(targetProperty, callExpr));
}
于 2012-10-22T13:28:36.757 回答