Unity 3D 中的GameObject.Find()

问题描述 投票:0回答:5

这是我在Unity3D教程中找到的C#方法:

Public List<Piece> pieces = new List<piece>(); // list of pieces in the pool

public Piece GetPiece(PieceType pt, int visualIndex) {
    Piece p = pieces.Find(x => x.type == pt && x.visualIndex == visualIndex);
} 

我不明白的是这一行:

x => x.type == pt...

“x”从哪里来以及为什么是 x.type?

c# unity-game-engine find gameobject object-pooling
5个回答
4
投票

这是

List<T>.Find
,与
GameObject.Find
无关!


List<T>.Find

搜索与指定谓词定义的条件相匹配的元素,并返回整个

List<T>
中的第一个匹配项。

Predicate<T>
是一个方法的委托[(或者在您的情况下是 lambda 表达式)],如果传递给它的对象与委托中定义的条件匹配,则返回
true
。当前
List<T>
的元素被单独传递给
Predicate<T>
委托,在
List<T>
中向前移动,从第一个元素开始,到最后一个元素结束。找到匹配项后,处理就会停止。


然后你有一个 Lambda 表达式,其中

x
是迭代器变量,如

foreach(var x in pieces)

这就是

x
的来源。基本上你喜欢叫什么就可以叫什么。它的类型是
Piece
,所以这取决于你的
Piece
实现,
x.type
是什么.. 看看你的参数,我会说它是一个
enum
,称为
PieceType


所以它的作用基本相同,只是

的简写
public Piece GetPiece(PieceType pt, int visualIndex) 
{
    foreach(var x in pieces)
    {
        if(x.type == pt && x.visualIndex == visualIndex) return x;
    }

    return default;
} 

3
投票

如果您查看

Find
定义
public T Find (Predicate<T> match)
,您会发现它接收
Predicate<T>
,它只不过是一个带有参数
T
和返回值
bool
Func<T, bool>
的函数。这实际上意味着将根据提供的函数过滤元素的序列。

指定

Func<T, bool>
的一种可能方法是使用称为 lambda 表达式的 C# 语言构造。也就是说
x => x.type == pt...
是一个 lambda 表达式,它定义了要搜索的元素的条件。

看着:

Piece p = Pieces.Find(x => x.type == pt && x.visualIndex == visualIndex)

目的是根据

Pieces
type
过滤
visualIndex
,其中
x
Piece
。不要与
x
混淆,您可以使用任何文字。你可以这样读: 给我每个 Piece x,其中 x.type 是 pt,x.visualIndex 是 VisualIndex


2
投票

x
是在
Piece
列表中找到的
Pieces
对象,而
x.type
是 Piece 类中定义的字段,这反过来又让您拥有具有相同
p
PieceType
 对象
作为
pt


2
投票

find
方法中,您声明一个 lambda 函数(更准确地说是一个 谓词),并且
x
是该函数的变量。根据此指令,
x
Piece
类的实例,它具有属性
type
visualIndex

此行的意思是:“查找

pieces
列表中的第一个元素,其中
type
设置为
pt
并且
visualIndex
设置为
visualIndex
”。


2
投票
Pieces.Find(x => x.type == pt && x.visualIndex == visualIndex)

可以写成

Pieces.Find(singlePiece => singlePiece.type == pt && singlePiece.visualIndex == visualIndex)

翻译为:

“在集合“Pieces”中找到第一个类型为 pt 且其 VisualIndex 属性等于 VisualIndex 的元素”

“singlePiece”或“x”表示使用 Find 方法“找到”元素必须满足哪些条件。

© www.soinside.com 2019 - 2024. All rights reserved.