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