为什么即使长度始终为1,Debug.Assert也显示错误消息?

时间:2020-02-17 22:44:01

标签: c# unity3d assert

private GameObject GetDoorShaderPrefab()
    {
        string[] shieldPrefab = AssetDatabase.FindAssets(c_doorShieldFxLocked);
        Debug.Assert(shieldPrefab.Length != 1, "Expected exactly 1 shield like this...");
        string shieldGuid = shieldPrefab[0];
        string prefabPath = AssetDatabase.GUIDToAssetPath(shieldGuid);
        GameObject prefab = AssetDatabase.LoadAssetAtPath<GameObject>(prefabPath);
        Debug.Assert(prefab != null, "Expected prefab to load");
        return prefab;
    }

我在行上使用了一个断点:

Debug.Assert(shieldPrefab.Length != 1, "Expected exactly 1 shield like this...");

shieldPrefab的长度始终为1,但仍显示错误消息“像这样精确地预期有1个屏蔽...”

GetDoorShaderPrefab方法在脚本的其他位置被多次调用。但是每次“长度”为1时,它都会一直显示错误消息。

2 个答案:

答案 0 :(得分:3)

我认为您的情况应该为== 1 所以:

Debug.Assert(shieldPrefab.Length == 1, "Expected exactly 1 shield like this...");

当条件为false时显示该消息。来自docs

声明(布尔值,字符串)

检查条件;如果条件为false,则输出指定的消息并显示一个显示调用堆栈的消息框。

想法是断言检查某些条件,并且只会抱怨您的断言是错误的。

为了容易记住,条件和文字应该告诉您相同的内容,而不是相反的内容。

答案 1 :(得分:1)

根据documentation Debug.Assert显示条件为 false ....

的消息。

因此,当您说“ shieldPrefab.Length!= 1”时,这始终是错误的,因为“长度”始终是1。

如果要检查长度是否不是 1,则需要应用相反的方法:

Debug.Assert(shieldPrefab.Length == 1, "Expected exactly 1 shield like this...");