C#建立物件列表(List)的不同方法
本文由碼農網 – 小峰原創翻譯,轉載請看清文末的轉載要求,歡迎參與我們的付費投稿計劃!
玩轉C#可有趣了。在這篇文章中,我們將介紹如何用不同的方法建立物件列表。因此,場景是這樣的,有一個MVC應用程式,我需要將5個空行(5個物件列表)繫結到grid表格,以便批量插入記錄。所以無論何時我開啟那個頁面,grid在可編輯模式下呈現5個空行。
在這篇文章中,為了更好的說明,我使用了“Book”的例子。舉個例子,假如我想新增多本書到一個圖書館管理軟體。首先,讓我們建立一個基本的POCO類——Book——它有一些屬性,看起來就像這樣:
public class Book { public string BookName { get; set; } = string.Empty; public string Author { get; set; } = string.Empty; public string ISBN { get; set; } = string.Empty; }
好的,讓我們從基本語法到高階語法開始探索吧。在C#3.0之前,要新增物件並初始化集合,我們經常是這樣做的:
var bookList = new List<Book>(); // Intiazize the object and add it to the collection var book1 = new Book(); bookList.Add(book1); var book2 = new Book(); bookList.Add(book2);
另一種方法是使用“for迴圈”,如下所示:
var bookList = new List<Book>(); // Another one is using for loop for(int i = 0; i < 2; i++) { bookList.Add(new Book()); }
另一種方法是使用AddRange()方法,它將物件新增到指定的集合中。
var bookList = new List<Book>(); // Using AddRange method. bookList.AddRange(new[] { new Book(), new Book() });
C#3.0帶來了很多增強功能。其中之一就是Collection Initializers。這是一個用於建立集合的縮短語法。
// using collection initializer var bookList = new List<Book>() { new Book(), new Book(), new Book() };
在.NET框架中,有一個類——Enumerable——居於“System.Linq”名稱空間下。這個類包含一些靜態方法,我們可以使用這些靜態方法建立物件列表。例如,使用Enumerable.Repeat()方法:
// using Enumerable.Repeat var bookList = Enumerable.Repeat(new Book(), 2).ToList();
在上面的方法中,第一個引數是我們想要建立或重複的物件。第二個引數是我們需要重複物件的次數。
使用Enumerable.Range()方法的另一個示例:
// and another one is Enumerable.Repeat var bookList = Enumerable.Range(1, 2).Select(i => new Book()).ToList();
Range()方法會在指定範圍內生成一個集合。請注意,這種方法有很多很多用例。
好吧,但我想在另一個應用程式中使用它,所以我決定做一個擴充套件方法,並使得該擴充套件方法可以通用。所以,在這裡,我建立了兩個擴充套件方法。第一個將新增“N”個物件到列表中。第二個將返回“N”個物件的集合。
public static class UtilityExt { ///<summary> /// Add "N" number of objects to the source list. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="emptySource"></param> /// <param name="number">Number of elements to add</param> public static void AddNObjectsToCollection<T>(this List<T> emptySource, int number) where T : new() { emptySource.AddRange(Enumerable.Repeat(new T(), number)); } ///<summary> /// Returns the collection which contains "N" numbers of elements of type T /// </summary> /// <typeparam name="T"></typeparam> /// <param name="emptySource"></param> /// <param name="number">Number of elements to return</param> /// <returns></returns> public static IList<T> GenerateSpecificNumberOfCollection<T>(this IEnumerable<T> emptySource, int number) where T : new() { return Enumerable.Repeat(new T(), number).ToList(); } }
你可以像這樣呼叫上面的方法:
// Calling first method - AddNObjectsToCollection var bookList = new List<Book>(); bookList.AddNObjectsToCollection(2); // ========== OR ========== // Calling second method - GenerateSpecificNumberOfCollection var bookList = new List<Book>().GenerateSpecificNumberOfCollection(3);
好的,上面提到的所有語法都會影響程式碼的可讀性和可重複性。如果你有任何其他可以實現相同結果的方法,歡迎隨時分享到評論部分。最後,希望你喜歡這篇文章。
譯文連結:http://www.codeceo.com/article/csharp-create-list.html
英文原文:Different Ways of Creating a List of Objects in C#
翻譯作者:碼農網 – 小峰
[ 轉載必須在正文中標註並保留原文連結、譯文連結和譯者等資訊。]
相關文章
- Python List 列表list()方法Python
- Python List 列表list()方法分享Python
- C# list物件排序C#物件排序
- JS建立物件幾種不同方法詳解JS物件
- 在Java中建立物件的不同方法是什麼?Java物件
- Python - list 列表常見方法Python
- 將List物件列表轉為樹形結構物件
- js建立物件的方法JS物件
- list列表運算子,列表元素的遍歷,列表的方法,生成列表,巢狀的列表|python自學筆記(四)巢狀Python筆記
- C# List.ForEach 方法C#
- 通過Guava實現兩個包含不同物件的List合併成一個ListGuava物件
- SCSS list 列表CSS
- JS中建立物件的方法JS物件
- 用C#建立COM物件 (轉)C#物件
- Python3 列表list合併的4種方法Python
- Redis的列表型別(List)Redis型別
- JS_建立物件+呼叫物件方法JS物件
- C# List 用法list<>C#
- Java建立物件的方法有哪些?Java物件
- JavaScript建立物件的多種方法JavaScript物件
- python列表(List)Python
- Python 列表(List)Python
- Python list(列表)Python
- Python List 列表的處理Python
- C++中建立持久物件的方法C++物件
- C# 實現http不同方法的請求C#HTTP
- React Native List列表React Native
- python--列表listPython
- js正則建立物件方法JS物件
- JavaScript 基礎(二) – 建立 function 物件的方法, String物件, Array物件JavaScriptFunction物件
- C#裡List的用法C#
- C# 有關List<T>的Contains與Equals方法C#AI
- Python基礎之list列表寫入檔案的四種方法Python
- C++中有三種建立物件的方法C++物件
- 最全--Java中建立物件的5種方法Java物件
- C# List用法C#
- 使用反射-動態建立物件及呼叫物件方法反射物件
- 【轉】[C#] 建立返回多個值的方法C#