用扩展方法分配属性的好方法

时间:2018-11-16 20:13:00

标签: c# extension-methods

我处于可以使用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)

1 个答案:

答案 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+中可用