-3

我是 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));
4

4 回答 4

2

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

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();
于 2013-07-26T03:54:41.047 回答
1

匿名类型(以及与此相关的元组)使您的代码更容易维护,而无需创建一百个小类,其唯一目的是在方法之间甚至在单个方法中传递几个值。

您可以在 James Hare 的一篇名为“元组和匿名类型的乐趣”的文章中阅读一些关于使用这两种方法的论点。

至于var,我想在大多数情况下,这是一个可读性问题。在某些情况下,很容易看出var将声明为哪种类型。

SomeClassThatINeedToUse myInstance = new SomeClassThatINeedToUse();

var myInstance = new SomeClassThatINeedToUse();
于 2013-07-26T03:53:50.117 回答
0

在处理大型应用程序时,您会遇到太多场景(编写 LINQ 查询),您不想为即将到达的每个小结构定义一个类。

保持简单!

IMO,关键字 var 的使用只是个人选择;但是匿名类型 - 太好了,无法抗拒使用。

于 2013-07-26T03:53:38.323 回答
0

这是一个旧线程,其中的讨论比您可能得到的要多得多,这里:在 C# 中使用 var 关键字

于 2013-07-26T04:21:55.943 回答