匿名类型 VS 局部变量,应该在什么情况下使用?

4

我不确定在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#中使用匿名类型?的重复问题。 - nawfal
3个回答

8

您是指静态类型的变量吗?请注意,匿名类型静态类型...

C#匿名类型存在两个问题:

  • 无法通过方法API公开它们。
  • 无法更改它们(成员为只读)。

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

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

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


2
如果将发送者和接收者分组在一起是否有意义,如果有的话,请考虑为它们创建一个类。如果没有,我通常会使用单独的本地变量,但我怀疑这只是出于习惯。
我怀疑我们这里有一对概念上相关的本地变量。这种关系可能不足以值得一个完整的类型,但在方法内部是有意义的。在某些方面,使用匿名类型是使这种配对明显的非常简洁的方法。另一方面,如果您的方法足够长,需要额外的清晰度水平,也许您应该将其拆分。
请注意,使用匿名类型会使某些重构技术更加困难,因为该类型仅在方法中可用(除非进行一些hackery)。
我意识到这是一个含混不清的答案,但我认为整体想法有一定的价值-有点像在函数式语言中使用元组。

1

在这种情况下,请使用本地变量(我认为这就是您的意思)。

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

在这里不需要类型,因此不要使用匿名类型。


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