3

这是我的代码。它抛出异常“'MyEnum.CommonCoreStandard'类型的对象无法转换为'System.Nullable`1 [System.Byte]'类型。” 同时设置第二个属性“Prop2”的值。我正在使用反射的概念将一种类型“BlEntity”转换为另一种类型“UiEntity”

public class BlEntity
{
    //CommonCoreStandard is an enum
    public CommonCoreStandard Prop1 { get; set; }
    public CommonCoreStandard? Prop2 { get; set; }
}

public class UiEntity
{
    public byte Prop1 { get; set; }
    public byte? Prop2 { get; set; }
}

 public void ConvertBlToUi()
    {
        var source = new BlEntity(CommonCoreStandard.KeyIdeasAndDetails, CommonCoreStandard.IntegrationOfKnowledge);
        var target = new UiEntity();

        TypeConverter.ConvertBlToUi(source,target);
 }

    public static void ConvertBlToUi<TBl, TUi>(TBl entitySource, TUi entityTarget)
    {
        var blProperties = typeof(TBl).GetProperties().Select(p => new { Name = p.Name.ToLower(), Property = p }).ToArray();

        var uiProperties = typeof(TUi).GetProperties().Select(p => new { Name = p.Name.ToLower(), Property = p });

        foreach (var uiProperty in uiProperties)
        {
            var value = blProperty.Property.GetValue(entitySource);
            uiProperty.Property.SetValue(entityTarget, value);
        }

    }
4

1 回答 1

11
    public static void ConvertBlToUi<TBl, TUi>(TBl entitySource, TUi entityTarget)
    {
        var blProperties = typeof(TBl).GetProperties().Select(p => new { Name = p.Name.ToLower(), Property = p }).ToArray();

        var uiProperties = typeof(TUi).GetProperties().Select(p => new { Name = p.Name.ToLower(), Property = p });

        foreach (var uiProperty in uiProperties)
        {
            var value = blProperty.Property.GetValue(entitySource);
            var t = Nullable.GetUnderlyingType(uiProperty.Property.PropertyType) ?? uiProperty.Property.PropertyType;
            var safeValue = (value == null) ? null : Convert.ChangeType(value, t);
            uiProperty.Property.SetValue(entityTarget, safeValue);
        }
    }
于 2013-02-14T16:31:06.740 回答