如果数组包含特定类,您如何询问它?

Mat*_*all 2 c# arrays methods xna contains

我正在尝试创建一个"马里奥"视频游戏,为了获得相交的对象,我们的老师为我们提供了一个示例演示,它允许对象检测它是否正在接触另一个对象,并且第一个对象是方法查找,返回.我正在尝试,而是返回当前对象当前正在触摸的每个对象的数组.我能够返回当前触及它的每个对象的数组,但现在我需要一种简单/有效的方法来检查数组是否包含所需类型的对象,例如

if (array.Contains(Mario))
    {
    //Do Work here
    }
Run Code Online (Sandbox Code Playgroud)

正在检查的数组是否包含(Mario),是相交Sprite的返回数组,但是当我问它是否实际包含Mario类型的对象时,它会显示"Error 14'WindowsGame10.Mario'是'type'但用作'变量'".我知道我可以使用for循环执行此操作,并询问数组中的每个索引if (array[i].GetType() == typeof(Mario)),但是我需要在代码中执行此检查的次数,并重复键入相同的代码,我觉得我需要学习一种更有效的方法来执行此操作.我是计算机程序设计的第一年,我正在使用C#XNA,我需要一些我能理解的解决方案.如果有更好的方法,请告诉我.

Ree*_*sey 6

您可以使用LINQ OfType()Any()方法:

if (array.OfType<Mario>().Any())
{
Run Code Online (Sandbox Code Playgroud)

  • 请注意,您仍然遍历数组,直到找到第一个匹配项,或者如果没有匹配项则遍历整个数组.Linq是一个很好的抽象,可以减少编程工作量,但它实际上可能比直接编码循环要慢得多.如果您有大量游戏对象(数千或更多),您可能希望优化存储结构以获得比O(n)搜索更好的效果. (3认同)