为什么要使用匿名类型而不是创建一个类

6

我正在重构一个老的应用程序,它使用动态内联SQL从大型Oracle数据库中提取数据。我创建了一个存储过程(PL/SQL),它运行良好。由于它只有一行数据,我将其保留为返回数据行。这个类驻留在DAL中。

随着我重构事物,我想将数据库(在DAL中)与业务层(使用linQ)隔离开来。我的第一个想法是创建一个对象来包含返回的数据行。

我的其中一位同事推荐使用匿名类型,但我不太熟悉。根据我目前的阅读,它似乎很简单。但如果我仍然需要使用匿名类型来输入字段名和字段类型,我就看不到它的价值所在了。

我错过了什么吗?如果我返回数据集/数据表,使用匿名类型是否会更有价值?


这是一个具体问题具体分析的情况。如果你需要在函数之间传递数据,就不能使用它们。 - gunr2171
感谢大家的回答。听起来匿名类型不是最好的选择,我应该坚持使用类。 - gDeveloper
3个回答

10
匿名类型被设计用于创建的作用域中使用。其他作用域不应该知道该匿名类型的定义,所以如果您想要从一个方法中返回此对象,则匿名类型是不适用的。
一般来说,这个对象只在同一个方法中使用一两次,并且它的使用非常简单明了,因此没有必要创建一个新的命名类型。它们也是不可变的,在C#中创建不可变对象需要更多的代码。

1
在C# 7中,我们现在可以返回元组,并将其重新分配给匿名类型。 - Nicholas Miller
是的,但在LINQ查询中,匿名类型是最好的解决方案。 - user9925979

1
匿名类型非常适合一次性操作,但我不会将它们用作数据库实体的替代品。像这样使用它们真的是一个糟糕的设计。

0

由于您无法返回匿名类型,因此您肯定不应该使用它们来表示域对象。它们的优点在于一次性使用,通常在处理数据对象集合时在lambda表达式内部使用。

一个典型的例子是当您需要处理两个单独的集合时:您可以将它们zip together,并将结果投影到仅存在于LINQ查询范围内的匿名类型上。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接