我需要将对象的所有公共属性复制到另一个类型的另一个对象。由Jon Skeet创建的库MiscUtil包含PropertyCopy类,它非常适合我需要的一件事。我在源对象中有一个属性需要转换为目标对象中的另一个类型(Guid => string)。
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("...");
}
}
那么可以创建一个表达式来绑定源属性到目标的转换吗?
答案 0 :(得分:0)
我认为
Expression.Bind(targetProperty, (Expression<Func<Guid,string>>) (v=>v.ToString()));
会工作......
答案 1 :(得分: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));
}