c# - 我可以在 C# 中实现从派生类复制的 'copy constructor' 吗?

标签 c# .net c#-4.0

一个应用程序特定示例来说明我的直接问题:

我有一个元数据提供程序类,它具有以下(简化的)接口(interface):

public class CtsDataAnnotationsModelMetadataProvider : DataAnnotationsModelMetadataProvider
{
    protected override ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes, Type containerType, Func<object> modelAccessor, Type modelType, string propertyName)
    {
        var metadata = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);
        return metadata;
    }
}

现在我想用额外的属性扩展 ModelMetadata,填充这些属性并返回 ExtendedModelMetadata 的实例。在我的扩展实例中,如何通过 base.CreateMetadata 很好地传达分配给 metadata 实例的属性?我想要但没有的是;

var metadata = (ExtendedModelMetadata)base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);

我可以为 ExtendedModelMetadata 创建一个构造函数,它接受一个 ModelMetadata 参数并将它的所有属性显式分配给正在构造的实例,但我想要一个更通用和较少的硬编码方法。我能做什么?

最佳答案

您可以使用 AutoMapper实现这一目标。

Mapper.CreateMap<ModelMetaData , ExtendedModelMetadata>();

.NET Framework 不提供深层复制功能。

关于c# - 我可以在 C# 中实现从派生类复制的 'copy constructor' 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9923608/

相关文章:

c# - Telerik RadListBox 不想拖动

c# - 如何在 C# 应用程序中调用 VBScript 文件?

c# - 包含反斜杠的路径字符串无法识别的转义序列

c# - 获取激活或聚焦的窗口或表单

C# .NET RTF 到 HTML 转换器和 HTML 到 RTF 转换器库

c# - 从 C# 代码执行 SQL 查询

C# 生成 Azure 表存储 ConnectionString

c# - 模拟 .NET 中的可等待计时器

wpf - MVVM 中的事件绑定(bind)

c# - 我怎样才能将 web api 用作 web 服务?