ReSharper可以生成将属性从一个对象复制到另一个对象的代码吗?

a7d*_*rew 38 c# resharper visual-studio

我正在寻找一种在编写代码时加速可重复任务的方法.我有ReSharper,我认为定制可以做我需要的.

我有两个相同类型的对象.我想将一个对象的所有公共属性复制到另一个对象.我想在这种情况下使用ReSharper工具为我生成代码.我会告诉它第一个对象和第二个对象的名称.我希望它找到第一个对象的所有公共属性,并将值复制到第二个对象.

这是我希望用ReSharper之类的工具生成的代码类型:

foo.Name = moo.Name;
foo.Age = moo.Age;
foo.City = moo.City;
Run Code Online (Sandbox Code Playgroud)

自动化这个从右到左复制值的简单代码可以节省大量时间,我认为ReSharper可以做到这一点.但是,我在搜索时没有看到任何弹出窗口.

我不是在寻找CodeSmith代码生成技术或T4模板,因为我只希望它在我的类中生成这些特定的行,而不是生成整个类或单独的文件.

有没有人知道按下几个按键的方法,输入上面的"foo"和"moo"对象名称并让工具从右到左的代码行生成这些副本?

更新:

我已经找到了一些关于构建ReSharper扩展的文档,这可能是通过该路径实现的,但它看起来真的很复杂.

http://www.jetbrains.net/confluence/display/ReSharper/PowerToys+Pack+3.0+User+Guide

除非其他人已经写过,否则这开始看起来像周末挑战.

Jes*_*ess 56

这真的很容易.ReSharper不会这样做,但你可以使用超级duper REGEX!

在Visual Studio中:

    public string Email { get; set; }
    public string CellPhone { get; set; }
    public int NumChildren { get; set; }
    public DateTime BirthDate { get; set; }
Run Code Online (Sandbox Code Playgroud)
  1. 选择所有属性.点击CTRL-D即可复制.

  2. 现在点击CTRL-H替换.确保.*选中正则表达式匹配.

  3. 替换:( public [\w?]* (\w*) .* 此正则表达式可能需要调整)

  4. 附: dest.$1 = source.$1;

现在你有一些漂亮的代码可以放在你选择的方法中:

    dest.Email = source.Email;
    dest.CellPhone = source.CellPhone;
    dest.NumChildren = source.NumChildren;
    dest.BirthDate = source.BirthDate;
Run Code Online (Sandbox Code Playgroud)


Mat*_*ius 11

这有点来自于@Jess的回答(他的正则表达式在VS2013上对我不起作用)但是没有使用Visual Studio我正在使用regex101

点击上面的链接,然后将您的属性粘贴到Test string字段中,您将获得它们的映射.

正则表达式我用过

public [A-Za-z\?]* ([A-Za-z0-9]*) .*

并替换

Dest.$1 = Source.$1

希望这可以节省你一些时间.


Ben*_*old 9

我不相信Resharper可以做到这一点,但开源AutoMapper可以.AutoMapper新手?查看" 入门"页面.

  • 我们在具有大量DTO的大型企业应用程序中使用Automapper,并且在6个月之后我们放弃了它,因为它比普通的旧属性分配更难维护和调试.不应该被认为是对AM的重大打击,但最后我们只想打破一行代码,而不是读出一个大的错误消息(错误消息是准确和有用的). (11认同)
  • 与TheDev6相同的经验,我们发现使用automapper基本上只是将疼痛延迟到后来,但持续疼痛直到它被移除.因此,为什么我正在读这个帖子,希望有人有一个基本的锅炉代码生成器:D (3认同)
  • 对于某些情况,Automapper绝对是一件好事,但对于大量对象来说,它可能非常慢. (2认同)
  • 我第二次@TheDev6。AutoMapper 设置复杂的地图场景并不容易,您需要运行 Web 应用程序或应用程序来查看它是否有效。与立即获得编译错误相比,开发过程非常缓慢。尽管我讨厌手动输入,但它总是有效并最终为我节省了大量时间。 (2认同)