c# - 如何将一个类的所有字段克隆(生成代码)到另一个类中?

标签 c# visual-studio

我正在编写一个 WCF 服务,我想使用基本上克隆我的类的所有字段的 DataTransferObjects。 例如我有一个类 Person

class Person
{
    public int Id;
    public string Name;
    public Person()
    {
        //Some complex stuff here
    }
}

class PersonDTO
{
    //Copy all public fields and properties of Person
    public int Id;
    public string Name;
}

有没有办法根据其他类生成我的 DTO 类?代码片段或类似的东西?

我不是要复制字段的值。我想生成一个与“父”类具有相同字段的类。但是我不想继承我的 DTO 类

最佳答案

您可以使用 T4 模板从您的实体生成 DTO。这是文章 Code generation with T4, Entities to DTOs example其中附有用于从实体生成 DTO 的示例项目。

主要思想是提供与实体组装的路径:

var entitiesAssembly = @"bin\Debug\EntitiesToDTO.dll";

然后从该程序集中获取所有实体类型:

var typesToRegister = 
    from t in LoadProjectAssembly(entitiesAssembly).GetExportedTypes()
    where t.Namespace == entitiesNamespace && t.IsClass && !t.IsAbstract
    select t;

并循环处理它们:

<#
foreach (var type in typesToRegister.Where(t => t.IsClass && !t.IsAbstract))
{#>
   [DataContract(Name="<#= ConvertToCamelCase(type.Name) #>]
   public partial class <#= GetDTOClassName(type.Name) #>
   {
      <# foreach (var property in type.GetProperties())
      {#>
         // analyze property type
         // and generate appropriate DataMember property
      <#}#>
   }
<#}#>

关于c# - 如何将一个类的所有字段克隆(生成代码)到另一个类中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22112487/

相关文章:

c# - 从摘要访问身份验证中导入登录名和密码

c# - 英孚、WinForms : how to add related navigation properties to DataGridView?

c++ - 识别两个函数

visual-studio - 项目属性未打开 - "There are no property pages for the selection"

visual-studio - Visual Basic 2010 Express 中的免费 Crystal 报表

visual-studio - 创建适用于 Windows 7/64 位的 XLL Excel 插件(在 Windows XP/32 上交叉编译)

javascript - 将项目添加到另一个部分 View 中的下拉列表中,而不刷新 View

c# - 在 WIndow 服务中捕获 KeyPress 事件

c# - 在泛型方法中返回一个类的对象

python 工具 Visual Studio - 步入不工作