【问题标题】:Anonymous types VS Local variables, When should one be used?匿名类型 VS 局部变量,什么时候应该使用?
【发布时间】:2009-02-09 19:20:04
【问题描述】:

我不确定何时应该在 C# 中使用 匿名类型 而不是 局部变量

我有:

string  fullMessage // This is the full message including sender and recipient names

string sender = GetMessagePart(fullMessage, "from");
string recipient = GetMessagePart(fullMessage, "to");

//do some stuff and deliver the message

我应该使用:

var msg = new { 
sender = GetMessagePart(fullMessage, "from")
recipient = GetMessagePart(fullMessage, "to")
};

相反?

【问题讨论】:

标签: c# .net


【解决方案1】:

你的意思是静态类型的变量吗?请注意,匿名类型静态类型的......(由于问题编辑而被删除)

C#匿名类型有2个问题:

  • 您不能通过方法 API 公开它们
  • 你不能改变它们(成员是只读的)

如果您只需要了解单个方法中的数据,并且它是只读的,那么匿名类型很方便(实际上这涵盖了很多情况)。

如果您需要改变数据或将其传递给调用者,请使用定制类或简单变量(等)。

在给定的情况下,我看不出使用匿名类型的理由;如果您只想要这些值,请使用单独的变量方法。如果“消息”具有定义的含义,请声明 Message 类并填充它。

【讨论】:

    【解决方案2】:

    在这种方法之外,将发件人和收件人分组在一起是否有意义?如果是这样,请考虑为他们创建一个类。如果不是,我通常会使用单独的局部变量,但我怀疑这主要是出于习惯。

    我怀疑我们这里得到的是一对在概念上相关的局部变量。这种关系可能不够牢固,不值得一个完整的类型,但它在方法中是有意义的。在某些方面,使用匿名类型是一种非常巧妙的方法,可以使这种配对变得明显。另一方面,如果你的方法足够长以至于它确实需要额外的清晰度,那么你还是应该把它分解。

    请注意,使用匿名类型会使一些重构技术变得更加困难,因为该类型仅适用于方法(没有一点骇客)。

    我意识到这是一个空想的答案,但我确实觉得整体想法有一些优点 - 这有点像在函数式语言中使用元组。

    【讨论】:

      【解决方案3】:

      在这种情况下使用局部变量(我认为这就是你的意思)。

      匿名类型应该用在你需要标准名称类型的地方,但仅用于方法内部的实现目的。它消除了创建新类型定义的繁琐工作。

      这里不需要类型,所以不要使用匿名类型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-16
        • 1970-01-01
        • 2011-09-03
        • 1970-01-01
        • 2010-11-17
        • 1970-01-01
        • 2021-12-19
        • 2019-11-04
        相关资源
        最近更新 更多