Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ命名标准-Lambda表达式_C#_.net_Linq_Naming Conventions - Fatal编程技术网

C# LINQ命名标准-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) 或 根本没有正确的方法。命名标准和任何其他编码标准一样(如表达式后/前的空格和新行)是组

我们通常遵循所有C#语法的编码/命名标准。例如,如果我们在方法内声明字符串,则使用范围数据类型FieldName格式。(lstrPersonName)

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

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

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);
另一个例子是,如果说type
Car
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