版本:Unity 6 (6000.0)
语言英语
  • C#

NativeArray<T0>.UnsafeElementAt

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。尽管我们不能接受所有提交的内容,但我们确实会阅读来自用户的每个建议的更改,并在适用的情况下进行更新。

关闭

提交失败

由于某种原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

public ref readonly T UnsafeElementAt(int index);

参数

index 元素的索引。

返回值

T 一个 ref readonly,指向类型为 T 的值。

描述

通过索引提供对 ReadOnly 元素的只读访问。

此方法很危险,因为它返回对可以被销毁的内存的引用(例如,使用 Dispose),如果访问 ref local,可能会导致未定义的结果,包括崩溃。

public readonly struct BigStruct
{
    public readonly long a;
    public readonly long b;
    public readonly long c;
    public readonly long d;
}

static void ProcessByte(byte b) { ... }

static void ProcessBigStructWithoutCopy(in BigStruct bigStruct) // see 'in' modificator { ... }

static void Example() { const int n = 32;

var nativeArrayOfBytes = new NativeArray<byte>(n, Allocator.Temp); var nativeArrayOfBigStructures = new NativeArray<FixedString4096Bytes>(n, Allocator.Temp);

// ... fill the arrays with some data ...

var readOnlyBytes = nativeArrayOfBytes.AsReadOnly(); for (var i = 0; i < n; ++i) { ProcessByte(readOnlyBytes[i]); //ProcessByte(readOnlyBytes.UnsafeElementAt(i)); is more expensive, since pointer on x64 platforms is 8 times bigger than a byte }

var readOnlyBigStructures = nativeArrayOfBigStructures.AsReadOnly(); for (var i = 0; i < n; ++i) { //ProcessBigStructWithoutCopy(readOnlyBigStructures[i]); copy - expensive in this case ProcessBigStructWithoutCopy(readOnlyBigStructures.UnsafeElementAt(i)); }

// dangerous part ref var element = ref readOnlyBigStructures.UnsafeElementAt(4);

// element is valid here ProcessBigStructWithoutCopy(element);

nativeArrayOfBigStructures.Dispose();

// access to element here is undefined, can lead to a crash or wrong results // ProcessBigStructWithoutCopy(element); <-- do not do this! }