匿名类型VS局部变量,何时应该使用?

时间:2009-02-09 10:39:32

标签: c# .net

我不确定何时应该在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")
};

相反?

3 个答案:

答案 0 :(得分:8)

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

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

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

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

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

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

答案 1 :(得分:2)

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

我怀疑我们在这里得到的是一对概念相关的局部变量。这种关系可能不够强大,不足以得到一个完整的类型,但它在方法中是有意义的。在某些方面,使用匿名类型是一种非常巧妙的方式,使配对显而易见。另一方面,如果你的方法足够长,确实需要额外的清晰度,也许你应该打破它。

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

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

答案 2 :(得分:1)

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

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

此处不需要输入类型,因此请勿使用匿名类型。