C# 为什么编译器在I';我没有右键单击UI元素

C# 为什么编译器在I';我没有右键单击UI元素,c#,unity3d,C#,Unity3d,当我单击空空间时,编译器在文件List.cs中给出了一个错误ArgumentOutOfRangeException,但如果我单击UI元素,它不会给出错误。但是如果我有支票怎么会出错呢 if (results != null) 这是我的代码: public void Update() { if (Input.GetKey(KeyCode.Mouse1)) { eventData = new PointerEventData(eventSystem);

当我单击空空间时,编译器在文件List.cs中给出了一个错误ArgumentOutOfRangeException,但如果我单击UI元素,它不会给出错误。但是如果我有支票怎么会出错呢

if (results != null)
这是我的代码:

public void Update()
{

    if (Input.GetKey(KeyCode.Mouse1))
    {
        eventData = new PointerEventData(eventSystem);
        eventData.position = Input.mousePosition;

        List<RaycastResult> results = new List<RaycastResult>();

        _raycaster.Raycast(eventData, results);

        if (results != null)
        {
            if (results[0].gameObject.tag == "ItemIcon")
            {
                if(currentMenu != null)
                {
                    Destroy(currentMenu);
                }
                currentMenu = Instantiate(SplitMenu, transform);
            }
        }
    }
} 
public void Update()
{
if(Input.GetKey(KeyCode.Mouse1))
{
eventData=新点eventData(eventSystem);
eventData.position=Input.mousePosition;
列表结果=新列表();
_raycaster.Raycast(事件数据、结果);
如果(结果!=null)
{
如果(结果[0].gameObject.tag==“ItemIcon”)
{
如果(当前菜单!=null)
{
销毁(当前菜单);
}
currentMenu=实例化(拆分菜单、转换);
}
}
}
} 

我的最佳猜测是您正在检查结果!=null,但您并没有检查结果中是否包含任何元素。因此,对空数组使用结果[0]会导致您看到ArgumentOutOfRangeException


和&results.Any()
添加到if检查中应该可以解决此问题。

最佳选项:我们需要使用
results.Count!=0
而不是
null

1.    List<RaycastResult> results = new List<RaycastResult>();

     _raycaster.Raycast(eventData, results);

2.    if (results != null)
    {
3.        if (results[0].gameObject.tag == "ItemIcon")

.Any()
.Count>0更好,因为它意味着“列表中有东西”,而不是“计数大于0”。

请尝试
results.Count!=0 而不是<代码> null 实际上,请考虑<代码>如果(结果!= NULL和RESULL ANY()){…
。异常很可能是您在空集合中查找第一个元素的结果。顺便说一句,这是您的代码引发的异常,它不是由编译器发出的。Ali Kanat,它帮助了我。谢谢。或者干脆
&&result[0]!=null
,因为无论如何只有
结果[0]
稍后使用。防止因使用LinQ@derHugo:否,
&&result[0]!=null
将引发相同的异常。
results.Count!=0
比使用
Any
更有效,假设这是一个
列表
。如果要避免Linq,也可以使用
results.Length>0
(或者是.Count?我已经有一段时间没有使用C了,我不记得Count是否是另一个LInq扩展)。@CodeMonkey:
Count()
是一个扩展方法,
Count
IList
/
IReadOnlyList
等中的一个属性。
Length
是数组上的属性……为了一致性,)
if(results.Any())