【问题标题】:Unity 3D C# Check for Vector3 in ListUnity 3D C# 检查列表中的 Vector3
【发布时间】:2018-06-26 03:31:30
【问题描述】:

我正在使用 Argon Granberg 的 A* 寻路脚本,我正在尝试检查是否定义了列表元素

有一个 Vector3 值列表存储为 p.vectorPath 变量。我正在尝试测试列表元素是否定义为

if ( p.vectorPath[myIndex] != null ) {
...

但我在 Unity 中遇到错误,即测试 Vector3 != null 将始终 = true。那么如何测试这个特定的列表索引是否已定义?

谢谢。

【问题讨论】:

  • “定义”是什么意思?你的意思是初始化? Vector3 是一种值类型(结构),不存在未定义(或空)值类型(除非您将其设为可空)。值类型在它们在 c# 中声明的那一刻被初始化 - 如果你没有提供初始值,它有它的默认值(在这种情况下是 Vector3.zero)
  • 应该把它作为答案发布
  • OTOH,如果你想知道列表是否在位置 N 有任何元素,你可以检查 list.Count 是否大于 N
  • @C.Carter,我会,但我不确定这是否是 OP 的意思

标签: c# list unity3d


【解决方案1】:

Vector3 是一个值类型 (struct),并且不存在未定义(或 null)值类型之类的东西(除非您将其设为可空)。值类型在它们在 c# 中声明的那一刻被初始化 - 如果你没有提供初始值,它有它的默认值(在这种情况下是Vector3.zero

OTOH,如果您想知道列表是否在N 位置有任何元素,您可以检查list.Count 是否大于N

【讨论】:

  • @GeoffL 那么,你应用了这个建议吗?这个答案对你有帮助吗?如果是,您可以将此标记为“已接受”,以便其他有相同问题的人更容易找到解决方案。
【解决方案2】:

与其他答案一样,Vector3 不能为 null,因为它是一种值类型。您可以像这样使用Nullable 类型的Vector3 声明列表;

public class Foo
{
    public List<Vector3?> VectorPath;
}

Foo p = new Foo();

//...stuff...

if (p.VectorPath[someIndex].HasValue)
{
    //Do things.
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多