我处于可以使用AutoMapper的情况。但是我对象上的属性名称不同,AutoMapper映射将为这种奇怪的用法付出更多的努力。
这是我现在的代码
ObjectOne.PropOne = ObjectOne.PropOne.CopyFrom(ObjectTwo.PropX)
扩展方法如下所示-
public static T CopyFrom<T, U>(this T target, U source)
{
bool isValidString = (source is string && source != null && !string.IsNullOrEmpty(source.ToString()));
bool isValidNonString = (!(source is string) && source != null);
if (isValidString || isValidNonString)
target = Utils.GetValue<T>(source);
return target;
}
有没有一种方法可以避免分配并且可以像下面那样进行操作?
ObjectOne.PropOne.CopyFrom(ObjectTwo.PropX)
答案 0 :(得分:2)
您可以使用:
public static void CopyFrom<T, U>(ref this T target, U source)
{
bool isValidString = (source is string && source != null && !string.IsNullOrEmpty(source.ToString()));
bool isValidNonString = (!(source is string) && source != null);
if (isValidString || isValidNonString)
target = Utils.GetValue<T>(source);
}
但请注意,ref扩展方法仅在C#7.2+中可用