开放的编程资料库

当前位置:我爱分享网 > C#教程 > 正文

C# LINQ 类型

在本文中,我们展示了如何使用LINQ的OfType方法按类型过滤可枚举的元素。

语言集成查询(LINQ)是一种特定领域的语言,用于从各种数据源(包括数组、列表、XML文件或数据库)查询数据。

public static IEnumerable<TResult> OfType<TResult> (this IEnumerable source);

OfType方法根据指定类型过滤IEnumerable的元素。TResult是用于过滤序列元素的类型。source是要过滤其元素的序列。

C#LINQOfType示例

下面是一个使用LINQ的OfType方法的简单示例。

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#LINQOfType示例二

在下一个示例中,我们使用记录类型。

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接口和两种记录类型:UserAdmin。使用LINQ查询表达式,我们将管理员和用户从人员列表中分离出来。

$ dotnet run
Admin { Name = Roger Roe }
---------------------------
User { Name = John Doe },User { Name = Peter Smith },User { Name = Peter Novotny }

C#LINQ转换

还有一个类似的Cast方法。该方法将IEnumerable的元素转换为指定的类型。与OfType不同,如果序列中的元素无法转换为给定类型,则Cast方法会抛出InvalidCastException

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'.
...

在本文中,我们介绍了LINQOfType方法。

列出所有C#教程。

未经允许不得转载:我爱分享网 » C# LINQ 类型

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏