0

オブジェクトのすべてのパブリック プロパティを別の型の別のオブジェクトにコピーする必要があります。Jon Skeet によって作成されたライブラリMiscUtilには、1 つのことを除いて、私が必要とするものに完全に適合するクラス 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

以下のコードは、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 に答える
0

おもう

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

うまくいくだろう...

于 2012-10-19T20:06:36.460 に答える