将非null -able属性复制为null able属性

时间:2018-05-30 05:28:06

标签: c# asp.net

我正在从对象A到B执行对象的深层复制,但无法将非可空值复制为可空值。 (我将Child对象复制到Parent,但它复制空值)。我们如何将不可空的可复制为可空?

2 个答案:

答案 0 :(得分:0)

我引用了这个source。使用reflection,您可以执行此操作:

var sourceProperties = source.GetType().GetProperties();
var destinationProperties = destination.GetType().GetProperties();

object value = sourceProperty.GetValue(source);
    if (value == null && 
        targetProperty.PropertyType.IsValueType &&
        Nullable.GetUnderlyingType(targetProperty.PropertyType) == null)
    {
        // Code....
    }
    else
    {
        targetProperty.SetValue(target, value);
    }

答案 1 :(得分:0)

如果您将int成员与Nullable<int>(您可以写为int?)进行比较,那么您对相同类型的控件将会失败(正如预期的那样)它们不是同一类型。

您可以使用以下内容:

bool DestinationIsCompatible(Type source, Type destination)
{
    // null checks omitted...

    if (source == destination)
        return true;

    Type nullableType = Nullable.GetUnderlyingType(destination);
    if (nullableType == source)
        return true;

    return false;
}

并用

替换您的控件
if (!DestinationIsCompatible(sourceProperty.PropertyType, destinationProperty.PropertyType)) continue;