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