c# - 使用扩展方法分配属性的好方法

标签 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)

最佳答案

您可以使用:

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

关于c# - 使用扩展方法分配属性的好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53344750/

相关文章:

c# - 使用“移动然后复制”覆盖锁定的文件

c# - 图像对应用程序内存使用的影响

kotlin - 调用接口(interface)中声明的接收器函数

c# - 为所有枚举添加扩展方法,而不仅仅是特定类型

ios - 迭代 Swift 扩展中的可用类?

c# - 使用 C# 和 .NET 2.0 从 mp4 中逐帧获取数据

c# - 使用 Reactive Extensions 对事件进行单元测试

C# WriteFile(),无法写入 USB HID 设备

c# - 为什么这个扩展方法没有初始化返回的对象?

c# - .ToList() 和 .Reverse() 等扩展方法在幕后如何看待?