遍历数组,查找与参数名称相同的项目

时间:2019-04-29 04:56:21

标签: c#

我有一个称为mItems的数组。该数组使用称为Item的类作为变量类型。对于此问题,我需要一个名为GetItem的方法来返回Item并采用字符串参数。该方法应迭代mItems数组,查找与参数名称相同的Item。如果找到匹配项,则应返回mItems数组的该元素。否则返回null。

我不知道如何辨别数组和Item是否具有相同的名称或如何对其进行编码。以及我认为我可能为数组使用了错误的变量类型。到目前为止,这就是我在下面看到的内容:

public Item[]mItems;

public string GetItem (string Item)
{
    if (mItems == Item)
        return Item;
    else
        return null;
}

Item类如下:

public class Item
    {
        //Field
        string name;


        //constructor
        public Item(string name)
        {
            name = "";   
        }

        //Method
        public string GetName()
        {
            return name;
        }


        public string SetName()
        {
            return name;
        }

我不断收到类似“操作符'=='的错误,不能应用于类型为'Item []'和'string'的操作数

3 个答案:

答案 0 :(得分:1)

您没有提供Item类,但我相信有一个名为Name的属性。因此,Item的最小定义如下:

public class Item
{
    public string Name { get; set; }
}

您的方法应该获得想要的名称作为参数并返回Item类型,因此它应该是:

public Item GetItem(string name)
{
}

现在,由于mItems是数组,因此您应该使用一些循环运算符(forforeach)对其进行迭代。使用for时,看起来像这样:

public Item GetItem(string name)
{
    for (int i = 0; i < mItems.Length; i++)
    {
        Item currentItem = mItems[i];
        if (currentItem.Name == name)
            return currentItem;
    }

    return null;
}

答案 1 :(得分:1)

首先,在您的示例中,数组mItems为空。但是可以说它实际上并不是空的,然后看一下比较行:

if (mItems == Item)

左侧部分是array,其中包含类Item的实例。右侧为string类型。您不能像这样比较不同的类型(同样,给您的string“ Item”(也就是该类的名称)命名是很糟糕的做法)。

根据类Item包含的内容,您可能需要这样的内容:

// The method takes a string input, but returns output of type 'Item'
public Item GetItem(string itemName)
{
    // You need to loop through all items
    foreach (var item in mItems)
    { 
        // Assuming that the class 'Item' has a property called
        // name, we can look for a match on that...
        if (item.Name == itemName)
            return Item;
    }

    // If we found no matches, return null
    return null;
}

您也可以使用LINQ,但是上述解决方案可能对初学者更友好...

答案 2 :(得分:0)

您无法在数组和字符串之间进行比较,我想您想要这个:

var mItem = new string[] { "sara", "jhon", "jack" };

public string GetItem (string item)
{

      foreach(var it in mItem)
      {
           if (it == item)
               return item;
           else
               return null;
       }
}