2009-11-03 79 views
7

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

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

我在思考如何遵循Lambda Expression中的命名标准。特别是当我们为func委托定义参数时,我们使用简写的名字如x。例如

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

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

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

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

OR

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

回答

7

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

描述性变量名称对于代码的可读性非常重要,但它并不总是必须描述变量的每个方面。像persons这样的名称表示它是人物对象的集合,无论是List<Person>还是IEnumerable<Person>通常对理解代码的作用并不重要,编译器会立即告诉您是否尝试完全错误。

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

1

没有正确的方法在所有。像任何其他编码标准一样命名标准(例如表达式之前/之前的空格和新行)是组内的约定。所以,只要你喜欢写你的代码,你应该在你的公司做。但始终如一!

我更喜欢在私人领域的名称中使用下划线前缀。但是你的风格(能见度+类型+名称)像我的老WInAPI代码引用(匈牙利符号)=)。

3

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

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

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

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

我这样做的速度,但是,我不认为有什么不妥使用查询全名即car => car.car_id

0

由于LON g,因为你的lambda表达式只是一个语句,我会尽可能缩短变量名称。命名的总体目的是使代码可读,在这些情况下,方法名称和一般上下文应该足够了。您可以随时使用x。对于Person对象,我倾向于使用p来代替。

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

2

我认为你使用的命名标准(匈牙利符号)是当像Visual Studio这样的高级工具不存在的时候需要的。今天,你有像Intellisense这样的技术,它可以告诉你大部分你正在做的事情都是错误的,比如给一个字符串分配一个int。所以,从今天起,它不是以前的良好编码习惯或标准的独有组成部分。这些天大多数人都喜欢使用帕斯卡套管或骆驼套管。如果有人使用它,我认为这更多是因为个人喜好。

话虽如此,根据您的代码和命名变量的方式,您应该按照第二种方法。再次,这归结于你个人的喜好。

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

10

我的lambda表达式使用一个字母参数,通常是什么样的参数名称将是第一个字母:

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

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

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

当没有连接到我使用x S上的东西,y小号太多的意义:

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

尽管如此,我使用lambda表达式的标准是急促第一,表达能力,因为上下文倾向于帮助理解事物(在第一个例子中,很明显b代表按钮)。

0

如果你的收藏被称为东西-persons,那么很明显,当你在做persons.Where(p => p.Whatever)p是一个人。如果你的lambdas太复杂了,不管你使用的是什么参数,它都不会立即显示,那么你根本不应该使用lambda表达式,或者使它们变得非常简单。

至于你的其他惯例,使用匈牙利语呼吁personName是一个字符串是什么点?很显然,一个名字将是一个字符串。为什么你需要一个前缀来提醒你一个变量是本地的?它的声明必然采用相同的方法,所以不能很久以前就已经忘记了。如果你有,那么你的方法太长或复杂。

只要你的标识符恰当地描述变量的含义,那么其余部分将是显而易见的。

0

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

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

这里我将用一个小例子来演示这两个选项的场景。这个例子有一个整数数组,我只用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表达式。

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

 #region Place to change 

     //Lambda Expression 

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

     #endregion