小心驶得万年船

1、if做边界或者异常判断的时候,一定不要忘了在else里打上log,加一句log远比出了bug一遍遍的缕代码逻辑的成本低得多。

        if (obj != null)
        {
           
        }
        else
        {
            Debug.Log("obj is null");
        }

2、在用for循环生成线程时,如果用到了“i”,要给他一个临时变量接收着,不然会出错,如:

	void Wrong()
	{
        for (int i = 0; i < 10; i++)
        {
			new Thread(() =>
			{
				Debug.Log(i);
			}).Start();

		}
	}

  结果有重复值且并不是每个 i 都被打印了出来

 

 正确的写法是

	void Right()
	{
		for (int i = 0; i < 10; i++)
		{
			int j = i;
			new Thread(() =>
			{
				Debug.Log(j);
				Thread.Sleep(100);
			}).Start();

		}
	}

  可以看出结果是正确的

 3、慎用字段UnityWebRequest .responseCode

想获取http错误码时,慎用该字段,因为该字段会在http出现“Cannot resolve destination host”错误时,返回0,可能和你们自己定义的成功的状态码有冲突

4、结构体不能等于null,想给结构体一个默认值,可以用default关键字

using UnityEngine;

public class Test : MonoBehaviour
{
    void Start()
    {
        //StructTest structTest = null;
        StructTest structTest = default(StructTest);
        Debug.Log(structTest.a);//a=0
    }

}
public struct StructTest
{
    public int a;
}

5、做存档数据的时候,不要使用 BinaryFormatter 序列化持久数据,因为它可以随C#版本变化,而且使数据难以阅读。

6、数据的保存、类与类之间的传递等可以考虑使用ScriptableObject

7、Directory.Move在跨磁盘时会报错:Access to the path is denied,比如从C盘移动到D盘,就会报错,应该用file.copy的形式将每个文件都烤过去,再删除掉原来的文件夹的形式,File.Move可能也有同样的问题,没试

posted on 2020-06-29 19:43  Jason_c  阅读(966)  评论(0编辑  收藏  举报