您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 
 

66 行
2.2 KiB

using System;
using System.Collections.Generic;
using System.Reflection;
using UnityEngine;
namespace Unity.UIWidgets.ui {
public static class NoAllocHelpers<T> {
static Func<List<T>, T[]> _extractArrayFromListDelegate;
static Action<List<T>, int> _resizeListDelegate;
public static T[] ExtractArrayFromListT(List<T> list) {
if (_extractArrayFromListDelegate == null) {
var ass = Assembly.GetAssembly(typeof(Mesh));
var type = ass.GetType("UnityEngine.NoAllocHelpers");
var methodInfo = type.GetMethod(
"ExtractArrayFromListT",
BindingFlags.Static | BindingFlags.Public)
.MakeGenericMethod(typeof(T));
_extractArrayFromListDelegate = (Func<List<T>, T[]>)
Delegate.CreateDelegate(typeof(Func<List<T>, T[]>), methodInfo);
}
return _extractArrayFromListDelegate(list);
}
public static void ResizeList(List<T> list, int size) {
if (size < list.Count) {
list.RemoveRange(size, list.Count - size);
return;
}
if (size == list.Count) {
return;
}
if (list.Capacity < size) {
list.Capacity = size;
}
if (_resizeListDelegate == null) {
var ass = Assembly.GetAssembly(typeof(Mesh)); // any class in UnityEngine
var type = ass.GetType("UnityEngine.NoAllocHelpers");
var methodInfo = type.GetMethod(
"ResizeList",
BindingFlags.Static | BindingFlags.Public)
.MakeGenericMethod(typeof(T));
_resizeListDelegate = (Action<List<T>, int>)
Delegate.CreateDelegate(typeof(Action<List<T>, int>), methodInfo);
}
_resizeListDelegate(list, size);
}
public static void EnsureListElemCount(List<T> list, int size) {
list.Clear();
if (list.Capacity < size) {
list.Capacity = size;
}
ResizeList(list, size);
}
}
}