IRONSOFTWAREHOME

了解 C# 列表

理解 C# List

Layla Porter

14m 6s

C# 中的 List 类是一种用途广泛的集合类型。 它以动态数组作为其内部数据结构,从而可以高效地操作元素。 创建列表时,您可以指定默认初始容量,以便从一开始就优化内存使用。 该容量是指列表在不重新分配内存的情况下,初始状态下可以容纳的元素数量。

在 Layla Porter 的视频" C# 入门教程 第 7 部分 - 使用 LINQ 查询数据"中,她深入探讨了 C# 列表的功能,演示了如何利用 LINQ(语言集成查询)高效地查询数据。 本文将 Layla 视频中的关键概念和示例进行分解,为初学者提供对 C# 列表的全面理解。

引入 C# 列表

正如莱拉在视频开头(0:03)提到的那样,C# 列表是一种用途广泛的数据结构,允许开发人员存储和操作元素集合。 与数组不同,列表可以动态调整大小,因此非常适合预先不知道元素数量的场景。

使用列表非常简单。 您可以使用 Add 方法向列表中添加元素,该方法会将指定的对象追加到列表末尾。该列表使用从零开始的索引,这意味着第一个元素位于索引 0 处。您还可以使用方括号 ([]) 通过指定的索引访问元素。

要遍历列表,可以使用 foreach 循环,它会按元素出现的顺序遍历每个元素。 如果您需要查找特定元素的首次出现,可以使用带有谓词的 IndexOf 等方法,该方法会根据指定的条件进行搜索。

列表是强类型的,这意味着它可以保存特定类型(T)的对象。 这样可以确保类型安全,并允许使用由指定对象类型定义的方法和属性。 默认情况下,List 使用默认的哈希函数来高效地组织元素。

让我们深入了解一下 List 和 List 类方法的工作原理,就像 Layla 在她的视频中演示的那样。

创建列表

在 C# 中创建列表时,可以设置指定的初始容量来优化内部数据结构。 列表用途广泛,可以从指定的元素集合进行初始化。 您可以使用整数索引访问元素,并使用 foreach 循环遍历它们。与字典不同,列表不依赖默认的哈希函数,并且它们存储强类型对象,从而确保数据管理中的类型安全性和一致性。

在 (0:44) 处,Layla 创建了一个奶酪列表,演示了如何初始化和填充列表。在 C# 中,可以使用 List 类创建列表,其中 T 表示列表中元素的类型。

List<Cheese> cheeseList = new List<Cheese>
{
    new Cheese(1, "Stilton", 3.0m, 5),
    new Cheese(2, "Cheddar", 2.25m, 3),
    new Cheese(3, "Pineapple", 3.5m, 1),
    new Cheese(4, "Brie", 5.5m, 2),
    new Cheese(5, "Roquefort", 3.5m, 5),
};

在上述示例中,Layla 使用集合初始化语法创建一个Cheese对象的列表。 她为与 Cheese 类对应的每个奶酪对象指定了 ID、名称、价格和强度等属性,演示了如何在 C# 中创建和初始化列表。

遍历奶酪清单,打印 ID 和名称

Layla Porter 演示了如何使用 foreach 循环遍历cheeseList并仅打印每种奶酪的 ID 和 Name。 以下是代码及解释:

foreach (var cheese in cheeseList)
{
    Console.WriteLine($"ID: {cheese.ID}, Name: {cheese.Name}");
}

在上述代码中,Layla 使用 foreach 循环遍历cheeseList。 这将打印出列表中的所有元素。循环遍历列表中的每个 Cheese 对象。在每次迭代中,变量cheese保存当前索引处的 Cheese 对象。 使用Console.WriteLine,她打印每个奶酪元素的 ID 和 Name 属性,展示如何在 C# 中访问和显示列表中特定的元素。

使用 LINQ 查询搜索奶酪

在视频 2:45 处,Layla Porter 演示了如何使用 LINQ 根据用户输入搜索特定的奶酪。 她使用ReadLine方法从用户那里获取奶酪名称:

string cheeseName = Console.ReadLine();

在列表中搜索项目时,Layla 在 2:51 强调了一个非常重要的关键点。她说,如果我们不使用 LINQ,我们就必须手动遍历集合中的每一种奶酪,才能找到与用户输入匹配的名称,但 LINQ 的辅助库会在后台处理这些操作,使整个过程非常高效。 以下代码片段演示了 Layla (3:40) 如何在不使用 for 循环的情况下遍历列表元素,只需使用 LINQ 查询语法:

if (cheeseList.Any(cheese => cheese.Name == cheeseName))
{
    Cheese cheese = cheeseList.FirstOrDefault(c => c.Name == cheeseName);

    Console.WriteLine($"{cheese.Name} cheese costs £{cheese.Price.ToString()} and has a strength of {cheese.Strength}.");
}
else
{
    Console.WriteLine("I'm sorry, we don't have that cheese.");
}

在上述代码中

  • Layla 解释说,与其手动遍历列表,不如使用 LINQ 进行更高效的搜索。 Any方法检查列表中是否有任何奶酪匹配用户输入的名称。

  • 如果找到匹配项,则元素存在,FirstOrDefault方法检索与输入名称匹配的第一个奶酪。 该方法很安全,因为如果没有找到匹配项,它会返回 null,从而防止潜在的错误。

  • 如果找到奶酪,则打印其名称、价格和强度。 否则,将显示一条消息,表明未找到奶酪。

这种方法展现了在 C# 中使用 LINQ 搜索集合的效率和简易性。 代码片段的输出显示在 7:19:(比下面的图像更好的可能吗?)

示例输出

搜索时处理大小写敏感性

在处理字符串时,Layla 在8:00 提醒,重要的是要记住它们对大小写敏感。为了确保我们的奶酪名称比较不区分大小写,我们需要使用.ToLower()方法将用户输入和列表中的奶酪名称都转换为小写。 这样一来,用户可以输入任何类型的字母大小写,我们的代码仍然能够正确找到匹配的奶酪。 请记住,字符串区分大小写可能会很麻烦,因此正确处理至关重要。

实际示例:按强度查询奶酪

在 (8:50) 处,Layla 创建了一个实际示例,用户可以按强度筛选奶酪,演示了如何将用户输入与 LINQ 查询结合起来。

1. 用户输入提示和读取

Console.WriteLine("What strength cheese are you interested in - choose between 1 and 5");
string strengthString = Console.ReadLine();

Layla 在9:05,首先要求用户选择一个介于1到5之间的强度值。通过简单的Console.ReadLine()以获取他们输入的内容。

2. 将输入转换为整数

bool isInt = int.TryParse(strengthString, out int strength);

接下来,在 9:16,她确认他们输入的是一个实际的数字。 她建议为此使用int.TryParse。 如果输入正确且成功转换为整数,那就太好了! 如果不行,那我们也能妥善处理。

3. 按强度过滤奶酪

List<Cheese> cheeseByStrength = cheeseList.Where(c => c.Strength == strength).ToList();

现在到了 Layla 视频中10:25的有趣部分。在这里,她展示了如何使用 LINQ 来过滤我们的奶酪列表,即cheeseList。 使用 LINQ 的Where方法和一个简单的 lambda 表达式(c => c.Strength == strength),她只提取与用户选择的强度匹配的奶酪。 这给了我们一个新列表,cheeseByStrength

4. 出货过滤奶酪

foreach (var cheese in cheeseByStrength)
{
    Console.WriteLine($"Name: {cheese.Name} cheese");
}

最后在12:03,为了圆满结束,Layla 使用 foreach 循环遍历Console.WriteLine中指定的谓词打印其名称。 简单有效!

在 12:17 执行程序时,Layla 演示了用户如何输入强度值,列表将被筛选,只显示具有指定强度的奶酪。 下面显示了示例输出:(更好的图像可能?)

示例输出

结论

Layla 的视频有效地介绍了 C# 列表的概念以及如何使用 LINQ 查询列表。 通过学习她的例子和解释,初学者可以掌握在 C# 中处理列表和查询数据的扎实基础。 欲了解更多详情和观看实时编程课程,请查看 Layla 的 YouTube频道并加入她的直播。

请记得探索 List 类的各种方法和属性,例如Insert方法、谓词函数等,以增强您理解和有效操作列表的能力。

Earn More by Sharing What You Love

Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

立即获取免费的 30 天试用版密钥

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

OR
bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户