C# LINQ OfType
最后修改于 2023 年 7 月 5 日
在本文中,我们将展示如何使用 LINQ 的 OfType 方法通过类型筛选枚举中的元素。
语言集成查询 (LINQ) 是一种特定领域的语言,用于查询来自各种数据源的数据,包括数组、列表、XML 文件或数据库。
public static IEnumerable<TResult> OfType<TResult> (this IEnumerable source);
OfType 方法根据指定的类型筛选 IEnumerable 的元素。TResult 是要筛选序列元素的类型。source 是要筛选其元素的序列。
C# LINQ OfType 示例
以下是一个使用 LINQ 的 OfType 方法的简单示例。
Program.cs
object[] vals = new object[] {
"falcon", 12, "sky", "new", "34", 11
};
var res = vals.OfType<int>();
foreach(var e in res)
{
Console.WriteLine(e);
}
Console.WriteLine("-----------------------");
var res2 = vals.OfType<string>();
foreach(var e in res2)
{
Console.WriteLine(e);
}
我们定义一个对象数组。在该数组中,我们有字符串和整数。借助 OfType 方法,我们分别提取整数和字符串。
var res = vals.OfType<int>();
foreach(var e in res)
{
Console.WriteLine(e);
}
这里我们从数组中筛选出所有整数。类型在尖括号之间指定。
$ dotnet run 12 11 ----------------------- falcon sky new 34
C# LINQ OfType 示例 II
在下一个示例中,我们将使用记录类型。
Program.cs
List<Person> persons = new List<Person> {
new User("John Doe"), new Admin("Roger Roe"),
new User("Peter Smith"), new User("Peter Novotny")
};
var res = from person in persons.OfType<Admin>()
select person;
Console.WriteLine(string.Join(",", res));
Console.WriteLine("---------------------------");
var res2 = from person in persons.OfType<User>()
select person;
Console.WriteLine(string.Join(",", res2));
interface Person { }
record User(string Name) : Person;
record Admin(string Name) : Person;
我们定义 Person 接口和两种记录类型:User 和 Admin。使用 LINQ 查询表达式,我们从人员列表中分离出管理员和用户。
$ dotnet run
Admin { Name = Roger Roe }
---------------------------
User { Name = John Doe },User { Name = Peter Smith },User { Name = Peter Novotny }
C# LINQ Cast
还有一个类似的 Cast 方法。该方法将 IEnumerable 的元素强制转换为指定的类型。与 OfType 不同,如果序列中的元素无法强制转换为给定的类型,则 Cast 方法会抛出 InvalidCastException。
Program.cs
object[] vals = new object[] {
"falcon", 12, "sky", "new", "34", 11
};
var res = vals.Cast<string>();
foreach(var e in res)
{
Console.WriteLine(e);
}
我们在一个对象数组上使用 Cast 方法。
$ dotnet run falcon Unhandled exception. System.InvalidCastException: Unable to cast object of type 'System.Int32' to type 'System.String'. ...
来源
在本文中,我们介绍了 LINQ 的 OfType 方法。
作者
列出所有 C# 教程。