.net:在业务层引入匿名类型?

Posted

技术标签:

【中文标题】.net:在业务层引入匿名类型?【英文标题】:.net: Introducing anonymous types in business layer? 【发布时间】:2011-06-18 14:02:58 【问题描述】:

我不想创建一个新类并决定使用匿名类型来将数据从表示层发送到业务层。

但我的问题是如何在 biz 层中引入匿名类型?我使用 Vb.Net 2008 和 VS 2008。

编辑

实际上,我必须处理一些数据,它们的性质实际上是临时类,我不会在我自己的项目中再次使用它们。

【问题讨论】:

您要解决什么问题?为什么匿名类型是答案? 我不想创建新类,所以改用匿名类型。但它们并没有在业务逻辑层中引入。这就是问题 匿名类型的跨程序集甚至跨函数使用受到非常限制。我认为它们不能解决您的问题。 为什么不想添加一个新的类型/类?不选择明显的方式需要一个很好的理由。 @0xA3: 好吧,我正在处理的数据不是主要的,它们是在中间过程中产生的。 【参考方案1】:

Anonymous types 具有范围,因此只能在创建它们的方法内以强类型的方式访问它们。如果您想将它们从方法传递到另一个方法,则必须将它们作为object 传递并使用反射(或dynamic)来访问它们的属性,这肯定不是您想要的。

为您的数据使用适当的类。

【讨论】:

【参考方案2】:

我不建议你做这样的事情。这样的代码将不可维护。但是你可以从 4.0 开始使用 dynamic,这对这个没有好处。

【讨论】:

@odiseh:那我建议你尽快切换到 C# 4.0【参考方案3】:

不要,不要!

如果他们生活在服务器边界上,你最终会在你的函数的客户端上使用dynamic,这是不好的。

这是因为您可能不得不在方法签名中将对象公开为object,您将失去类型安全的所有好处。

另一方面,你什么也没做,编译器无论如何都会为你吐出一个类。

【讨论】:

你能解释一下吗? 我添加了更多解释。如果你把你想做的代码sn-p,我可以解释一下。 好吧,我有一个处理主从数据的winform。有 2 个数据网格视图,它们的数据作为详细信息。因此,当用户单击“保存”按钮时,除了保存主数据外,我还应该保存所有数据数据,即 2 个 datagridviews 数据。我决定为 2 个数据网格视图创建 2 个匿名类型,并将其作为 Save 方法的 2 个参数发送。但问题是业务逻辑层对匿名类型一无所知。你有什么建议?

以上是关于.net:在业务层引入匿名类型?的主要内容,如果未能解决你的问题,请参考以下文章

csharp 具有匿名类型c#的.net mvc json结果

ASP.NET MVC - 使用带有匿名类型和 Jquery 的 JavaScriptStringEncode()

关于匿名类型的使用

使用 System.Text.Json 反序列化匿名类型

来自 sql 查询执行实体框架的匿名类型结果

#yyds干货盘点#愚公系列2023年02月 .NET/C#知识点-委托匿名方法Lambda泛型委托表达式树的进化史