如果有人知道在.net中做这件事的更多方法,你对这种方法有什么看法?你选择哪种方法?为什么?
下面是对.net中不同对象复制方式的测试。
与此原始线程相关的测试:How to copy value from class X to class Y with the same property name in c#?
所以,在这里,你可以自己运行:

static void Main(string[] args)
    {
        Student _student = new Student();
        _student.Id = 1;
        _student.Name = "Timmmmmmmmaaaahhhh";
        _student.Courses = new List<int>();
        _student.Courses.Add(101);
        _student.Courses.Add(121);

        Stopwatch sw = new Stopwatch();

        Mapper.CreateMap<Student, StudentDTO>();

        StartTest(sw, "Auto Mapper");

        for (int i = 0; i < 1000000; i++)
        {
            StudentDTO dto = Mapper.Map<Student, StudentDTO>(_student);
        }

        StopTest(sw);

        StartTest(sw, "Implicit Operator");

        for (int i = 0; i < 1000000; i++)
        {
            StudentDTO itemT = _student;
        }

        StopTest(sw);

        StartTest(sw, "Property Copy");

        for (int i = 0; i < 1000000; i++)
        {

            StudentDTO itemT = new StudentDTO
            {
                Id = _student.Id,
                Name = _student.Name,
            };

            itemT.Courses = new List<int>();
            foreach (var course in _student.Courses)
            {
                itemT.Courses.Add(course);
            }
        }

        StopTest(sw);

        StartTest(sw, "Emit Mapper");

        ObjectsMapper<Student, StudentDTO> emitMapper = ObjectMapperManager.DefaultInstance.GetMapper<Student, StudentDTO>();

        for (int i = 0; i < 1000000; i++)
        {
            StudentDTO itemT = emitMapper.Map(_student);
        }

        StopTest(sw);
    }

在我的电脑上的测试结果:
测试自动映射器:22322 ms
测试隐式运算符:310 ms
测试属性副本:250 ms
测试发射映射器:281 ms
你可以从这里得到发射器和自动映射器:
http://emitmapper.codeplex.com/
http://automapper.codeplex.com/

最佳答案

也可以使用t4生成将生成属性复制代码的类。
好:尽可能快地跑
错误:t4中的“编码”
难看:生成允许一次性编译的构建脚本

08-26 17:36