kinect中使用的lambda函数

lambda function used in kinect

我正在阅读这篇关于 kinect 的book

我在这段代码中遇到了问题:

void kinectSensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
{
    SkeletonFrame frame = e.OpenSkeletonFrame();
    if (frame == null)
        return;
    Skeleton[] skeletons ;
    skeletons = frame.GetSkeletons();
    if (skeletons.All(s => s.TrackingState == SkeletonTrackingState.NotTracked))
        return;
}

本节中:

if (skeletons.All(s => s.TrackingState == SkeletonTrackingState.NotTracked))

我想知道谁提供了上面lambda exp中参数s的值?

以及 skeletons.All 是什么意思以及 return 是什么?

All 方法接受一个 Func<Skeleton, bool> 和一个 Func<Skeleton, bool> 是一个委托,它封装了一个接受 Skeleton 参数和 return 的方法 bool.

你可以自己定义这样一个方法:

private bool YourMethod(Skeleton s)
{
    return s.TrackingState == SkeletonTrackingState.NotTracked
}

...并将这个传递给 All 方法:

if (skeletons.All(YourMethod))

YourMethod 将为 skeletons 中的每个 Skeleton 调用,并且 All 方法将 return true 如果 YourMethod returns true 所有这些 Skeleton 个对象。

s => s.TrackingState == SkeletonTrackingState.NotTrackedYourMethod 的匿名版本:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/anonymous-methods