C# Cheat Sheet

将object类型参数转成泛型T

Convert.ChangeType

1
var a = (T) Convert.ChangeType(_arg, typeof(T));

比如分析Lua出入的参数时候,参数列表中的参数类型为object,但是回传给分析函数时候,回传参数类型为T

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/// <summary>
/// 将给定参数从Index开始,按两个一组进行拆分回调. 用于和Lua交互时候对传参进行分析
/// </summary>
/// <param name="_startIndex">开始的Index</param>
/// <param name="_args">参数列表</param>
/// <param name="_callBack">回调函数</param>
/// <typeparam name="A">参数1的泛型</typeparam>
/// <typeparam name="B">参数2的泛型</typeparam>
public static void AnyliseParams<A, B>(int _startIndex, object[] _args, Action<A, B> _callBack)
{
var length = _args.Length;
if (_startIndex < 0 || _startIndex >= length || length == 0
|| (length - _startIndex) % 2 != 0)
{
//传入的参数不合法
Debug.LogError("rGDIaQ2H");
return;
}

var nowIndex = _startIndex;
while (nowIndex < length)
{
var a = (A) Convert.ChangeType(_args[nowIndex], typeof(A));
var b = (B) Convert.ChangeType(_args[nowIndex + 1], typeof(B));
_callBack(a, b);
nowIndex += 2;
}
}

UnityEngine.Object != 不能替换 ?.

1
2
3
4
5
6
mCurrentMesh?.Clear();

if (mCurrentMesh != null)
{
mCurrentMesh.Clear();
}

上面两个判断 不相等

?. on a type deriving from UnityEngine.Object bypasses the lifetime check on the underlying Unity engine object.

原因在 这个帖子里面有说明.

主要是 Unity的Object 内部重载了 null 判等, 会去检查 对象是否被 GameObject.Destory(*)了 , 也就是 内存在,但是引擎中被销毁. 那样也认为null了

坚持原创技术分享,您的支持将鼓励我继续创作!