2009-02-09 38 views
4

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

我:

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") 
}; 

呢?

+0

[应该如何在C#中使用匿名类型](http://stackoverflow.com/questions/48668/how-should-anonymous-types-be-used-in-c) – nawfal 2014-07-15 15:28:42

回答

8

你是指静态类型变量吗?需要注意的是匿名类型静态类型...(删除,由于问题编辑)

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

  • 您无法通过API方法揭露
  • 他们
  • 你不能变异他们(成员只读)

如果你只需要知道一个方法中的数据,它是只读的,那么一个匿名类型是得心应手(和这个c实际上在很多情况下)。

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

在给出的情况下,我看不到使用匿名类型的原因;如果你只是想要的值,使用单独的变量的方法。如果“消息”具有定义的含义,则声明一个Message类并填充它。

1

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

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

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

2

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

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

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

我意识到这是一个虚无answer answer的答案,但它确实让我觉得总体思想中有一些优点 - 这有点像在函数式语言中使用元组。