2009-11-03 97 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