转换数据类型 (C#)
转换方法可更改输入对象的类型。
LINQ 查询中的转换运算可用于各种应用程序。 以下是一些示例:
Enumerable.AsEnumerable 方法可用于隐藏类型的标准查询运算符自定义实现。
Enumerable.OfType 方法可用于为 LINQ 查询启用非参数化集合。
Enumerable.ToArray、Enumerable.ToDictionary、Enumerable.ToList 和 Enumerable.ToLookup 方法可用于强制执行即时的查询,而不是将其推迟到枚举该查询时。
方法
下表列出了执行数据类型转换的标准查询运算符方法。
本表中名称以“As”开头的转换方法可更改源集合的静态类型,但不对其进行枚举。 名称以“To”开头的方法可枚举源集合,并将项放入相应的集合类型。
方法名 | 描述 | C# 查询表达式语法 | 详细信息 |
---|---|---|---|
AsEnumerable | 返回类型化为 IEnumerable<T> 的输入。 | 不适用。 | Enumerable.AsEnumerable |
AsQueryable | 将(泛型)IEnumerable 转换为(泛型)IQueryable。 | 不适用。 | Queryable.AsQueryable |
Cast | 将集合中的元素转换为指定类型。 | 使用显式类型化的范围变量。 例如:from string str in words |
Enumerable.Cast Queryable.Cast |
OfType | 根据其转换为指定类型的能力筛选值。 | 不适用。 | Enumerable.OfType Queryable.OfType |
ToArray | 将集合转换为数组。 此方法强制执行查询。 | 不适用。 | Enumerable.ToArray |
ToDictionary | 根据键选择器函数将元素放入 Dictionary<TKey,TValue>。 此方法强制执行查询。 | 不适用。 | Enumerable.ToDictionary |
ToList | 将集合转换为 List<T>。 此方法强制执行查询。 | 不适用。 | Enumerable.ToList |
ToLookup | 根据键选择器函数将元素放入 Lookup<TKey,TElement>(一对多字典)。 此方法强制执行查询。 | 不适用。 | Enumerable.ToLookup |
查询表达式语法示例
下面的代码示例使用显式类型化的范围变量将类型转换为子类型,然后才访问仅在此子类型上可用的成员。
class Plant
{
public string Name { get; set; }
}
class CarnivorousPlant : Plant
{
public string TrapType { get; set; }
}
static void Cast()
{
Plant[] plants = new Plant[] {
new CarnivorousPlant { Name = "Venus Fly Trap", TrapType = "Snap Trap" },
new CarnivorousPlant { Name = "Pitcher Plant", TrapType = "Pitfall Trap" },
new CarnivorousPlant { Name = "Sundew", TrapType = "Flypaper Trap" },
new CarnivorousPlant { Name = "Waterwheel Plant", TrapType = "Snap Trap" }
};
var query = from CarnivorousPlant cPlant in plants
where cPlant.TrapType == "Snap Trap"
select cPlant;
foreach (Plant plant in query)
Console.WriteLine(plant.Name);
/* This code produces the following output:
Venus Fly Trap
Waterwheel Plant
*/
}