Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我的对象为null,但我仍然可以对其调用函数(=null返回true)(getType返回myType)_C#_Unity3d - Fatal编程技术网

C# 我的对象为null,但我仍然可以对其调用函数(=null返回true)(getType返回myType)

C# 我的对象为null,但我仍然可以对其调用函数(=null返回true)(getType返回myType),c#,unity3d,C#,Unity3d,我有一个对象列表,如果对象被删除,我想删除引用该列表中特定对象的按钮。我的问题是,当我将一个对象添加到该列表中时,一旦该对象被添加,按钮就会立即删除它们自己,因为它应该是空的 每个按钮都有一个具有对象“名称”属性(ProductName)的组件,我在列表中查找具有相同名称的对象,如果它找到一个对象(它确实找到了),则不应返回null(但它确实找到了) 我错过了什么 这是有问题的更新方法(附在按钮上) private void Update() { Product

我有一个对象列表,如果对象被删除,我想删除引用该列表中特定对象的按钮。我的问题是,当我将一个对象添加到该列表中时,一旦该对象被添加,按钮就会立即删除它们自己,因为它应该是空的

每个按钮都有一个具有对象“名称”属性(ProductName)的组件,我在列表中查找具有相同名称的对象,如果它找到一个对象(它确实找到了),则不应返回null(但它确实找到了)

我错过了什么

这是有问题的更新方法(附在按钮上)

    private void Update()
    {
        Product p = GameManager.Instance.shoppingCart.Find(n => n.pname.Equals(gameObject.GetComponentInParent<ProductName>().name));
        Debug.Log(p);
        Debug.Log("p is of type " + p.GetType());
        Debug.Log("p is null is " + (p == null));

        if (p == null)
        {
            Object.Destroy(gameObject);
        }
        if (ButtonIsClicked)
        {
            GameManager.Instance.AddProduct(p);
            ButtonIsClicked = false;
        }
    }
下面是生成按钮的更新函数

    void Update()
    {
        for (int i = amount; i < GameManager.Instance.shoppingCart.Count; amount++, i++)
        {
            GameObject go = Instantiate(ButtonPrefab, transform.position + new Vector3(200, Ypos, 3), Quaternion.identity);
            go.transform.parent = GameObject.Find("PopupPanel").transform;
            ProductName pname = go.AddComponent<ProductName>();
            pname.name = GameManager.Instance.shoppingCart.ElementAt(amount).pname;
            Ypos -= 30;
        }
    }
void Update()
{
对于(int i=amount;i
调试日志返回(按顺序):

调试产品:1欧元x1//根据产品toString()函数

p为乘积型


p is null为True

产品
源于
单一行为
,它用一些奇怪的相等概念覆盖
=
运算符,使之成为
null
。那么如何检查空值呢?您可以使用
ReferenceEquals(p,null)
。或者如果C#7.0可用,您可以执行
p为null
。谢谢!我会试试的编辑:成功了,谢谢!另外一种方法是:
(object)p==null
。强制转换到
对象
“擦除”类型信息,使重载运算符不再适用。
    void Update()
    {
        for (int i = amount; i < GameManager.Instance.shoppingCart.Count; amount++, i++)
        {
            GameObject go = Instantiate(ButtonPrefab, transform.position + new Vector3(200, Ypos, 3), Quaternion.identity);
            go.transform.parent = GameObject.Find("PopupPanel").transform;
            ProductName pname = go.AddComponent<ProductName>();
            pname.name = GameManager.Instance.shoppingCart.ElementAt(amount).pname;
            Ypos -= 30;
        }
    }