我正在从对象A到B执行对象的深层复制,但无法将非可空值复制为可空值。 (我将Child对象复制到Parent,但它复制空值)。我们如何将不可空的可复制为可空?
答案 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;