Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ扩展对foreach的类型约束_C#_.net_Linq - Fatal编程技术网

C# 使用LINQ扩展对foreach的类型约束

C# 使用LINQ扩展对foreach的类型约束,c#,.net,linq,C#,.net,Linq,我在这里的某个地方看到过一种方法,可以将从foreach循环返回的项限制为特定类型,如果我没记错的话,可以使用IEnumerable上的LINQ扩展和lambda进行类型检查。我再也找不到了,有人能告诉我这是怎么实现的吗?你在找这个吗 public static IEnumerable<TResult> OfType<TResult>( this IEnumerable source ) 类型的公共静态IEnumerable( 这是一个数不清的来源 ) 您可以通

我在这里的某个地方看到过一种方法,可以将从foreach循环返回的项限制为特定类型,如果我没记错的话,可以使用IEnumerable上的LINQ扩展和lambda进行类型检查。我再也找不到了,有人能告诉我这是怎么实现的吗?

你在找这个吗

public static IEnumerable<TResult> OfType<TResult>(
    this IEnumerable source
)
类型的公共静态IEnumerable(
这是一个数不清的来源
)

您可以通过调用Where扩展方法来实现这一点,如下所示:

foreach(var x in theCollection.Where(i => i.GetType() == typeof(DesiredType))
{
     // Do something to x
}
但是这是非常有用的,它被内置到.NET框架中,这就是Chris在上面指出的。IEnumerable有一个名为OfType的扩展方法,已记录在案

要使用它,您可以执行以下操作:

foreach(var x in theCollection.OfType<int>())
{
     // Do something to x
}
foreach(collection.OfType()中的变量x)
{
//对x做点什么
}

我真的不明白“从foreach循环返回的项”是什么意思。@Thomas,foreach循环实际上创建了一个枚举器,而不是单个项,枚举器生成('returns')对象,但我只是为了简洁。请注意,这并不完全相同-调用GetType()然后与相等运算符相比,相等运算符在继承情况下的行为会有所不同。“is”运算符(即,其中(i=>i is DesiredType))更接近OfType。是的,没错。OfType问了一个问题“这个可以转换成那个吗?”,所以它更像是类型上的IsAssignableFrom()方法。