我不确定何时应该在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")
};
相反?
答案 0 :(得分:8)
你的意思是静态类型变量吗?请注意,匿名类型是静态类型... (由于问题编辑而被删除)
C#匿名类型有两个问题:
如果您只需要了解单个方法中的数据,并且它是只读的,那么匿名类型就很方便了(实际上这涵盖了很多情况)。
如果您需要改变数据或将其传递给调用者,则使用定制类或简单变量(等)。
在给出的情况下,我看不出使用匿名类型的理由;如果您只想要这些值,请使用单独的变量方法。如果“消息”具有已定义的含义,则声明Message
类并填充该消息。
答案 1 :(得分:2)
在此方法之外将发件人和收件人组合在一起是否有意义?如果是这样,请考虑为他们创建一个类。如果没有,我会通常使用单独的局部变量,但我怀疑这主要是通过习惯。
我怀疑我们在这里得到的是一对概念相关的局部变量。这种关系可能不够强大,不足以得到一个完整的类型,但它在方法中是有意义的。在某些方面,使用匿名类型是一种非常巧妙的方式,使配对显而易见。另一方面,如果你的方法足够长,确实需要额外的清晰度,也许你应该打破它。
请注意,使用匿名类型会使某些重构技术更难,因为该类型仅适用于该方法(没有一点hackery)。
我意识到这是一个愚蠢的回答,但它确实让我觉得整体想法有一些优点 - 这有点像在函数式语言中使用元组。
答案 2 :(得分:1)
在这种情况下使用局部变量(我认为这就是你的意思)。
匿名类型应该在需要标准名称类型的地方使用,但仅用于方法内部的实现目的。它消除了创建新类型定义的繁琐工作。
此处不需要输入类型,因此请勿使用匿名类型。