为什么要使用匿名类型(以及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));

为什么要使用匿名类型(以及var)

首先,让我们修复您的代码:

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关键字