繁体   English   中英

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

[英]Anonymous types VS Local variables, When should one be used?

我不确定何时应该在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#匿名类型有2个问题:

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

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

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM