在泛型集合的泛型方法上使用表达式lambda

Bil*_*ill 1 c# generics lambda mvvm

我试图理解下面使用lambda表达式.此代码取自Josh Smith出色的MVVM演示代码(http://msdn.microsoft.com/en-us/magazine/dd419663.aspx#id0090055).

方法调用如下:

AllCustomersViewModel workspace =
                this.Workspaces.FirstOrDefault(vm => vm is AllCustomersViewModel)
                as AllCustomersViewModel;
Run Code Online (Sandbox Code Playgroud)

如此处所使用的,FirstOrDefault具有以下定义,由Visual Studio 2010标识:

public static TSource FirstOrDefault<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);
Run Code Online (Sandbox Code Playgroud)

我不清楚

  1. 怎么vm得到它的类型?它没有在对象实例的其他地方定义.

  2. 如何FirstOrDefault(vm => vm is AllCustomersViewModel)满足source参数要求FirstOrDefault?这是某种暗示吗?

我一直在尝试使用这些资源来解析这个问题:

http://msdn.microsoft.com/en-us/library/bb397687.aspx

http://msdn.microsoft.com/en-us/library/bb397951.aspx

mqp*_*mqp 6

  1. vm获取其类型,因为它Workspaces是包含特定类型的集合. vm自动推断为该类型.

  2. source参数FirstOrDefaultWorkspaces. 这是一个扩展方法IEnumerable<T>,所以你把它的实例需要的第一个参数的地方.这就是this方法签名的含义.