我不确定,何时应该考虑不使用反射。 目前,我正在努力应对以下情况:

两个类之间的映射是通过反射(带有字典到属性)完成的。 在一个类中,我们有一个dictionary<string, object> ,在另一类中,我们有与字典的键同名的属性。 然后,我起诉反射以获取属性并进行设置。

您会发现,所有对象的铸件也很昂贵。 有时我必须进行自定义强制转换,因为类型不同。

反射的唯一最大优势是使用较少的行和较少的类的“轻松”映射。 反射和常规属性设置方法都是可行的。

注意 :我的问题更多是从设计的角度,而不是“如何”解决问题。

如果您能给我一些建议,将不胜感激。

#1楼 票数:1

我的问题更多是从设计的角度,而不是how to解决问题

为了回答您的问题,通常,您将使用Reflection进行动态属性映射,如下所示。 但是,在实践中,反射可能会很繁琐且缓慢(就像您开始注意到的那样)。 正如您可能已经猜到的那样,此问题非常普遍,并且已经有可以为您完成所有繁重工作的库,例如AutoMapper

就将Dictionary映射到对象而言,我从未使用过AutoMapper之类的东西,因此我无法评论它是否会支持它(我想它可能会支持,这非常灵活)。 如果您的Dictionary只是您自定义映射的桥梁,那么如果您确实切换为使用AutoMapper ,则可以完全摆脱此AutoMapper

  ask by CodeTherapist translate from so

未解决问题?本站智能推荐:

6回复

改善绩效反思-我应该考虑哪些替代方案?

我需要动态设置对象上的值或属性的值,称之为传输对象。 将会创建相当数量的这些传输对象,并在短时间内设置其属性。 我想避免使用反射。 还有替代品吗? 如果是这样的样本实现我可以看一下?
3回复

我应该考虑哪些伐木外墙?

我正在回顾一些关于登录.NET的旧问题。 许多帖子提到使用日志记录外观在应用程序和所选日志框架之间创建松散耦合。 这看起来很简单,直到我开始审查日志框架。 我查看了Common.Logging,它有一些有趣的功能,但看起来开发已停止。 我看着温莎城堡,但如果我只是想抽象出日志界面,这似乎
6回复

我什么时候应该考虑代表主键......?

我什么时候应该考虑将主键表示为类 ? 当表使用复合键时,我们是否应该只将主键表示为类? 例如: 然后 和 我应该何时考虑将数据作为逗号分隔值存储在数据库表的列中,而不是将它们存储在不同的列中?
1回复

我应该考虑使用SignalR而不是WCF双工服务吗?

我正在开发这个项目,其中有一个网站通过远程服务器上的wcf双工服务“实时”获取数据。 更新的频率约为一秒,我使用SignalR客户端来更新视图。 (每次有来自服务的传入“数据包”,我都会通知我的客户)。 目前,由于双工服务的工作方式,我遇到了此解决方案的一些问题。 每当与后端服务器没有
2回复

我应该考虑从WPF切换到Silverlight吗?[关闭]

我一直在将WPF用于一个新项目,但远未完成。 这是一个业余项目,也是一个非常有用的项目。 我希望具有跨平台兼容性(即Linux + Mac + Windows),但是Windows是主要目标。 我对网络语言以及C#和Erlang相当满意,但是C / C ++不在其中,而且我讨厌Java。
3回复

反思,援引

我有一个dll文件,我从中获取了一个对象,并通过该对象调用了该dll中的函数,如下所示: 我出于某种原因使用了反射。 因此,我需要使用invoke函数并为变量设置值,然后调用基本函数Exec​​ute。 以前我写过以下内容: 但这对我没有用。 我使用了以下内容: 我只是想问
1回复

属性内的反思?

以下是我目前的情况。 我想使用反射使它动态化。 与之类似,将属性的类型和名称传递给方法。 我不确定该怎么办,甚至不确定。 谢谢您的协助。 编辑:感谢KooKiz,我已经能够走得更远,但仍不能100%达到目标。
8回复

代码的反思

是否可以使用反射来了解代码正在做什么,而不是类型和方法,而是方法内部的内容(if语句,赋值等)。 我知道我可以反汇编它,但是我需要在运行时使用C#分析一个类,例如找出条件有多少...... 这个工具需要在C#中,任何想法? CLR中可以打开程序集并允许我在其中导航代码的任何类。