@poke 当前的答案是正确的,并指出了元组和匿名类型之间的区别。我将讨论为什么您仍会使用它们或更喜欢其中一个。
有两个新的 c# 7 功能淘汰了匿名类型。值元组和记录。
您不会使用匿名类型的主要原因是
- 您不能全局使用匿名类型,它们仅在本地使用时是类型安全的。不是本地的,您必须将其视为
dynamic
具有显着性能开销的对象
您更喜欢元组而不是匿名类型的原因。
它们在所有地方都是类型安全的。(无论命名如何)
它们可以用作方法参数、类型参数、字段以及几乎所有地方。(是的,我说了很多,有些地方需要采用元组,这是时间问题。)
因为它们可以用作类型参数,所以您可能更喜欢将轻量级参数集包装在单个参数中。像Stack<(min, mid, max)>
您可以在您认为合适时更改项目命名,在通用上下文中名称item
可能会满足,在更具体的上下文中您也需要更具体的名称,例如car
它们是隐式可转换的,int, int
可以在(int, long)
没有显式转换的情况下分配。
它们在Deconstruct中使用。这给语言带来了很多语法糖。
你可以有多个赋值和声明,比如(int x, int y) = (0, 1)
拥有所有这些功能,还有一个原因是您可能更喜欢匿名类型而不是元组。
但是如果你想全局使用匿名类型呢?你喜欢动态对象还是静态类型对象?
传入的记录功能再次击败匿名类型。使用记录,您可以以简短、简洁和方便的方式定义您的班级。没有大碍。只有一行
public class Point(X, Y);
到处都是类型安全,而且你手头还有参考类型。这两个新功能带来了击败匿名类型的一切。
请注意,尚未添加记录,我们只需要等待。
只有剩余的匿名类型的实际使用将是
正如我所说,ValueTuples 还不兼容每个组件。这只是时间问题,但这就是它未来的样子。
足够的论据。以我的拙见,匿名类型的使用变得很少见,老程序员可能仍然习惯于在 Linq 中使用匿名类型。