为什么要使用匿名类型(以及var)
本文关键字:以及 var 类型 为什么 | 更新日期: 2023-09-27 18:25:10
我是c#的新手,我完全反对var
。
每当我在代码示例中看到var
时,我都会疯狂地问:"它是什么类型的?"即使语义很明显,我也希望看到完整的类型名称。全称的出现让我觉得代码优雅而专业。
我知道如果使用匿名类型,var
可能是必要的,但我也反对匿名类型。如果你想使用一个类型,为什么不给它一个名字呢?以下是使用var
的一些示例:
var results = context.People.Select(p => new {p.PersonID, p.Name});
但我认为它应该这样写:(不要争论定义或语法,我不确定它是否正确,因为我不熟悉linq,我只想说"为什么不给它起个名字?")
class Result
{
public int PersonID;
public string Name;
public Result(int id, string name)
{
PersonID = id;
Name = name;
}
}
Result results = context.People.Select(p => new Result(p.PersonID, p.Name));
首先,让我们修复您的代码:
class Result
{
public int PersonID;
public string Name;
public Result(int id, string name)
{
PersonID = id;
Name = name;
}
}
IEnumerable<Result> results = context.People.Select(p => new Result(p.PersonID, p.Name));
老实说,现在应该很清楚为什么很多人喜欢"var"和匿名类型——你的版本明显更冗长了。
特别是在LINQ查询中,您通常想要一个范围非常有限的数据类型,因此定义新数据类型的成本过高,而且几乎没有价值。我经常看到的另一种情况是匿名类型被串行化(例如到json)——将数据和字段名写在一起可以生成简单的代码。
new {Name = "Mike", Version = 1, Date = DateTime.Now}.ToJson();
匿名类型(以及元组)可以更容易地维护代码,而无需创建一百个小类来在方法之间甚至在单个方法内传递几个值。
你可以在詹姆斯·黑尔的一篇文章《元组和匿名类型的乐趣》中读到一些关于两者使用的论点。
至于var
,我想在大多数情况下这是一个可读性问题。在某些情况下,很容易看出哪种类型的var
将被声明为.
SomeClassThatINeedToUse myInstance = new SomeClassThatINeedToUse();
var myInstance = new SomeClassThatINeedToUse();
当你在一个大型应用程序上工作时,你会遇到太多的场景(编写LINQ查询),你不想为即将到达的每个小结构定义一个类。
保持简单!!
IMO,关键字var的使用只是个人的选择;但匿名类型-太好了,无法抗拒使用。
这是一个老话题,讨论内容比你可能得到的要多得多,这里:在C#中使用var关键字