C# LINQ命名标准-Lambda表达式
我们通常遵循所有C#语法的编码/命名标准。例如,如果我们在方法内声明字符串,则使用范围数据类型FieldName格式。(lstrPersonName) 如果你看上面这行,X不遵循任何标准。我还了解到lambda表达式的一个目的是减少代码的长度 我在这里寻求帮助,以获得命名标准的正确方法C# LINQ命名标准-Lambda表达式,c#,.net,linq,naming-conventions,C#,.net,Linq,Naming Conventions,我们通常遵循所有C#语法的编码/命名标准。例如,如果我们在方法内声明字符串,则使用范围数据类型FieldName格式。(lstrPersonName) 如果你看上面这行,X不遵循任何标准。我还了解到lambda表达式的一个目的是减少代码的长度 我在这里寻求帮助,以获得命名标准的正确方法 var lobjPerson = icolPerson.Where(x => x.person_id = 100) 或 根本没有正确的方法。命名标准和任何其他编码标准一样(如表达式后/前的空格和新行)是组
var lobjPerson = icolPerson.Where(x => x.person_id = 100)
或
根本没有正确的方法。命名标准和任何其他编码标准一样(如表达式后/前的空格和新行)是组内的约定。所以,只需按照您喜欢的方式编写代码,并按照您在公司应该做的方式编写代码。但要始终如一
我更喜欢在私有字段的名称中使用下划线前缀。但是您的样式(可见性+类型+名称)对我来说就像旧的WInAPI代码引用(匈牙利符号)=)。我通常只使用我查询的类型的第一个字母,因此在您的情况下,因为它是Person类型,我会:
var lobjPerson = icolPerson.Where(p => p.person_id = 100);
var lobjCar = icolCar.Where(c => c.car_id = 100);
另一个例子是,如果说typeCar
I,我会:
var lobjPerson = icolPerson.Where(p => p.person_id = 100);
var lobjCar = icolCar.Where(c => c.car_id = 100);
我这样做是为了快速,但是,我不认为在查询中使用全名有任何错误,即
car=>car.car\u id
只要lambda表达式只是一个语句,我就尽量保持变量名短。命名的总体目的是使代码可读,在这些情况下,方法名和一般上下文就足够了
您不必一直使用x
。对于Person对象,我倾向于使用p
如果您需要编写一个包含大括号和分号的更复杂的表达式,我认为所有的常规命名规则都适用。我认为您使用的命名标准(匈牙利符号)是当时的需要,当时还没有像Visual Studio这样引人注目的工具。如今,有了Intellisense之类的技术,它可以告诉您在键入变量时所做的大部分错误,比如将int赋值给字符串。因此,到今天为止,它不再像过去那样是好的编码约定或标准的专有部分。如今,大多数人都采用帕斯卡肠衣或骆驼肠衣。如果有人使用它,我认为更多的是因为个人偏好 话虽如此,根据您编码和命名变量的方式,您应该遵循第二种方法。同样,这可以归结为你的个人偏好
附言:这一评论并不意味着我看不起你对匈牙利符号的使用。:) 我的lambda使用单字母参数,通常是参数名称的第一个字母:
按钮。选择(b=>b.Text)代码>
services.Select(s=>s.Type)代码>
x
s和y
s没有太多意义时:
value.Aggregate((x,y)=>x+y)代码>
总而言之,我对lambdas使用的标准是先短后表达,因为上下文往往有助于理解事物(在第一个示例中,
b
显然代表按钮)。如果你的收藏被称为某物-persons
,那么当你在做persons.Where>时,很明显(p=>p.Whatever)
即p
是一个人。如果您的lambda非常复杂,无论您使用的参数是什么,都无法立即显示出来,那么您根本不应该使用lambda,或者将其大大简化
至于你的其他约定,用匈牙利语说出personName
是一个字符串有什么意义呢?很明显,一个名称就是一个字符串。为什么你需要一个前缀来提醒你一个变量是一个局部变量呢?它的声明必须在同一个方法中,所以你不会很久以前就放弃了如果你有,那么你的方法太长或太复杂
只要让您的标识符适当地描述变量的含义,其余的就显而易见了。我用VBScript(ASP)做了很多编程,在那里,使用匈牙利符号来跟踪数据类型对于保持理智至关重要。在C#这样的类型安全语言中,我发现这样使用匈牙利符号毫无用处 描述性变量名在很大程度上提高了代码的可读性,但它并不总是必须描述变量的每一个方面。像
persons
这样的名称表示它是person对象的集合,无论是List
还是IEnumerable
,了解代码的内容通常并不重要如果您试图做一些完全错误的事情,编译器会立即告诉您
我经常使用单字母变量名,其中变量的范围非常有限。例如,小循环中的
I
索引变量或lambda表达式中的变量。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表达式
因此,只需将#区域区域替换为以下代码块,结果将是相同的
#region Place to change
//Lambda Expression
var aa = arrInt.Where(s => s % 2 == 0);
#endregion
#region Place to change
//Lambda Expression
var aa = arrInt.Where(s => s % 2 == 0);
#endregion