LINQ命名标准 - Lambda表达式

时间:2009-11-03 10:33:40

标签: c# .net linq naming-conventions

我们通常遵循所有C#语法的编码/命名标准。例如,如果我们在方法中声明字符串,我们使用Scope-datatype-FieldName格式。 (lstrPersonName)

List<Person> icolPerson;
private LoadPersonName()
{
   string lstrPersonaName;
}

我想我们如何遵循Lambda Expression中的命名标准。特别是当我们为func委托定义参数时,我们使用像x这样的短名称。例如

var lobjPerson = icolPerson.Where(x => x.person_id = 100)

如果你看上面的行,X不遵循任何标准。我还读到lambda表达式的一个目的是减少lenghthy代码。

我在这里寻求帮助以获得命名标准的正确方法。

var lobjPerson = icolPerson.Where(x => x.person_id = 100)

OR

var lobjPerson = icolPerson.Where(lobjPerson => lobjPerson .person_id = 100)

8 个答案:

答案 0 :(得分:11)

我的lambda使用一个字母参数,通常是参数名称的第一个字母:

  • buttons.Select(b => b.Text);

  • services.Select(s => s.Type);

但有时我会添加一些字母以使事情更清晰,或消除两个参数之间的歧义。

如果我使用x s和y s的内容没有多大意义:

  • values.Aggregate((x, y) => x + y);

所有人都说,我用于lambdas的标准首先是短暂性,后面是表达性,因为上下文倾向于帮助理解事物(在第一个例子中显然b代表一个按钮)。

答案 1 :(得分:8)

我在VBScript(ASP)中做了很多编程,并且使用匈牙利符号来跟踪数据类型对于保持理智至关重要。在像C#这样的类型安全的语言中,我完全没有用这种方式使用匈牙利语符号。

描述性变量名称对代码的可读性非常重要,但并不总是要描述变量的每个方面。类似persons的名称表示它是人物对象的集合,无论是List<Person>还是IEnumerable<Person>通常对于理解代码的作用并不重要,编译器会立即告诉您如果你想做一些完全错误的事情。

我经常使用单字母变量名称,其中变量的范围非常有限。例如,小循环或lambda表达式中的i索引变量。

答案 2 :(得分:3)

我通常只使用我要查询的类型的第一个字母,所以在你的情况下,因为它是Person我会做的类型:

var lobjPerson = icolPerson.Where(p => p.person_id = 100);

另一个例子,如果说我会做类型Car

var lobjCar = icolCar.Where(c => c.car_id = 100);

我这样做是为了快速,但我认为在查询中使用全名没有任何错误,即car => car.car_id

答案 3 :(得分:2)

我认为您使用的命名标准(匈牙利语符号)是当时没有像Visual Studio这样的高配置工具时需要的时间。今天你有像Intellisense这样的技术,它可以告诉你在键入变量时你输入的大部分内容,比如为字符串赋值。因此,截至今天,它并不像以前那样是良好的编码约定或标准的专有部分。这些天大多数人都遵循pascal套管或骆驼套管。如果有人使用它,我认为这更多是因为个人偏好。

话虽如此,根据您对变量进行编码和命名的方式,您应该遵循第二种方法。再次,这归结为您的个人偏好。

PS:这个评论并不意味着我正在低估你对匈牙利表示法的使用。 :)

答案 4 :(得分:1)

根本没有正确的方法。与任何其他编码标准(如空格和表达式之前/之后的新行)一样命名标准是组内的约定。所以,只需编写您喜欢的代码,就像您应该在公司一样。但要坚持不懈!

我更喜欢在私有字段的名称中使用下划线前缀。但你的风格(可见性+类型+名称)就像旧的WInAPI代码引用(匈牙利表示法)=)。

答案 5 :(得分:0)

只要你的lambda表达式只是一个语句,我就会保持变量名尽可能短。命名的总体目的是使代码可读,在这些情况下,方法名称和一般上下文应该足够。

您不必一直使用x。对于Person对象,我倾向于使用p代替。

如果你需要编写一个涉及大括号和分号的更复杂的表达式,我会说所有正常的命名规则都适用。

答案 6 :(得分:0)

如果您的收藏被称为某个内容 - persons,那么当您persons.Where(p => p.Whatever)执行p时,显而易见的是personName。如果你的lambdas如此复杂,那么无论你使用的参数是什么都不是很明显,那么你根本不应该使用lambdas,或者使它们变得非常简单。

至于你的其他约定,使用匈牙利语来表示{{1}}是一个字符串是什么意思?很明显,名称将是一个字符串。为什么你需要一个前缀来提醒你变量是本地的?它的声明必然采用相同的方法,所以不久之前你已经忘记了它。如果你有,那么你的方法太长或太复杂。

让你的标识符恰当地描述变量的含义是什么,其余的将是显而易见的。

答案 7 :(得分:0)

LINQ不仅适用于曾经为数据库编写查询的开发人员,也适用于功能程序员。

所以如果您对SQL类型的查询不太满意,请不要担心,我们有一个非常好的选项叫做“Lambda Expression”。

在这里,我将通过一个小例子演示这两个选项的场景。这个例子有一个整数数组,我只使用LINQ的力量检索偶数。

我们走了

using System;
using System.Collections.Generic;
using System.Text;
using System.Query;
using System.Xml.XLinq;
using System.Data.DLinq;

namespace LINQConsoleApplication1
{

class Program
{
    static void Main(string[] args)
    {
        int[] arrInt = {1,2,3,4,5,6,7,8,9,10};

        #region Place to change

        //Language Integrated Query

        var aa = from s in arrInt

                 where s % 2 == 0
                 select s;

        #endregion

        foreach (var item in aa)
        {
            Console.WriteLine("{0}", item);
        }

        Console.ReadKey();

    }

}

}

如果您不想使用不同的查询语言方法,那么您可以自由使用Lambda Expression。

所以只需用以下代码块替换#region区域,结果将是相同的。

        #region Place to change

        //Lambda Expression

        var aa = arrInt.Where(s => s % 2 == 0);

        #endregion