我正在读这个关于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
的意思和它的回报是什么?
All
方法接受Func<Skeleton, bool>
,而Func<Skeleton, bool>
是一个委托,它封装了一个接受Skeleton
参数并返回bool
的方法。
您可以自己定义这样的方法:
private bool YourMethod(Skeleton s)
{
return s.TrackingState == SkeletonTrackingState.NotTracked
}
...并将此传递给All
方法:
if (skeletons.All(YourMethod))
如果YourMethod
为所有那些Skeleton
物体返回skeletons
,All
将在true
中被调用YourMethod
并且true
方法将返回Skeleton
。
s => s.TrackingState == SkeletonTrackingState.NotTracked
是YourMethod
的匿名版本:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/anonymous-methods