C#list.Contains()
时间: 2024-04-23 08:28:24 浏览: 108
C#中的List.Contains()是一个方法,用于检查列表中是否存在指定的元素。它接受一个参数,该参数是要检查是否存在于列表中的元素,并返回一个布尔值来指示结果。如果列表包含指定的元素,它将返回true;否则,它将返回false。下面是一个示例代码:
```csharp
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
bool containsThree = numbers.Contains(3);
Console.WriteLine(containsThree); // 输出: True
bool containsTen = numbers.Contains(10);
Console.WriteLine(containsTen); // 输出: False
```
在上面的示例中,List.Contains()方法用于检查列表numbers中是否包含元素3和10,并相应地返回布尔值。
相关问题
C# List<T>.Contains 源码
在 C# 中,`List<T>.Contains` 方法的源码并不是公开的,因为这是 Microsoft.NET Framework 的一部分,它的实现是由编译器和框架库内部处理的,而不是开发者可以直接查看的源代码。然而,我们可以了解它的一般工作原理:
`List<T>.Contains` 方法通常是基于线性搜索(也称为顺序查找),它遍历整个列表,逐个比较每个元素是否等于给定的 `item`。当找到匹配项或搜索完整个列表都没有发现匹配时,返回 `true` 或 `false`。由于 List 实现了 `IEqualityComparer<T>` 接口,所以可以自定义比较规则(默认使用 `==` 进行比较)。
在实际的 .NET 框架源代码中,这个方法应该在 List 内部有一个类似于这样的实现:
```csharp (伪代码)
public bool Contains(T item) {
for (int i = 0; i < this.Count; i++) {
if (Equals(this[i], item)) { // 默认使用 == 进行比较
return true;
}
}
return false;
}
```
不过请注意,上述代码是简化的示例,实际的实现可能会更复杂,包括优化版本(如跳过已知不相等的部分)以提高性能。
优化C#代码:var ErtQuery = tQuery.Where(o => o.Process == "26").ToList(); var YitQuery = tQuery.Where(o => o.Process == "17").ToList(); YitQuery.RemoveAll(o => ErtQuery.Select(p => p.Barcode).Contains(o.Barcode)); var tQuery1 = YitQuery. Select(o => new FireRecord { Material = o.Material, TFireQty = !o.ChangeRemark.Contains("成检变更") ? o.Qty : 0, TChangeFireQty = o.ChangeRemark.Contains("成检变更") ? o.Qty : 0 }).ToList();
您可以尝试进一步优化这段代码,使其更加简洁和高效。下面是优化后的代码示例:
```csharp
var ErtQuery = tQuery.Where(o => o.Process == "26").ToList();
var YitQuery = tQuery.Where(o => o.Process == "17").ToList();
var ErtBarcodes = new HashSet<string>(ErtQuery.Select(p => p.Barcode));
YitQuery.RemoveAll(o => ErtBarcodes.Contains(o.Barcode));
var tQuery1 = YitQuery.Select(o => new FireRecord
{
Material = o.Material,
TFireQty = o.ChangeRemark.Contains("成检变更") ? 0 : o.Qty,
TChangeFireQty = o.ChangeRemark.Contains("成检变更") ? o.Qty : 0
}).ToList();
```
在这里,使用了 `HashSet<string>` 来存储 `ErtQuery` 中的 `Barcode` 值,以便更快地进行元素是否存在的判断。同时,合并了 `TFireQty` 和 `TChangeFireQty` 的计算,并使用三元表达式来简化逻辑。
请注意,优化代码之前,请确保对原始代码进行了充分的测试和验证,以确保逻辑正确性和预期结果的一致性。
阅读全文