2012-10-19 88 views
0

我需要將對象的所有公共屬性複製到另一個類型的另一個對象。由Jon Skeet創建的庫MiscUtil包含PropertyCopy類,它非常適合我需要的一件事情。我在源對象中有一個屬性需要轉換爲目標對象中的另一種類型(Guid => string)。從PropertyCopy將Guid轉換爲字符串的表達式

偏碼:

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

下面的代碼轉換的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)); 
} 
0

我覺得

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

會工作......

+0

謝謝您的回答,但它沒有工作。 –