LINQ
这个有点意思,叫做「语言整合查询」(Language Integrated Query),可以在C#里用类似sql的查询方法,只要是枚举类都可以用这个。
/// 沒有 LINQ 的寫法
var result = new List<string>();
foreach (var f in files)
{
if (f.Contains(keyword))
result.Add(f);
}
/// 有 LINQ 的寫法
var result = files.Where(f => f.Contains(keyword)).ToList();
常用方法:
| 方法 | 作用 |
|---|---|
.Where() | 筛选(过滤条件) |
.Select() | 转换(这个就是map,对每个元素执行自定函数操作) |
.FirstOrDefault() | 取第一个,没有就返回 null |
.Any() | 有没有符合条件的元素 |
.Count() | 计算数量 |
.OrderBy() | 排序 |
.ToList() / .ToArray() | 具体化结果 |
.ToHashSet() | 转为哈希Set(去重),元素可以给入去重规则 规则的类型需要是 IEqualityComparer<T> |
然后这里的关键是,查询的描述跟最终的执行是分开的,所以必须用 ToList() 或者是 ToArray() 立即执行,亦或者是需要的时候再调这个去执行。
List 跟 Array 大部分情况下差不多,但最大的不同就是前者可以随时增减,而后者是固定的。如果是不会变动的场景,后者会比较合适,因为性能更高。而如果需要随时增减,那就得用前者了。