我有一个称为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'的操作数
答案 0 :(得分:1)
您没有提供Item类,但我相信有一个名为Name
的属性。因此,Item的最小定义如下:
public class Item
{
public string Name { get; set; }
}
您的方法应该获得想要的名称作为参数并返回Item类型,因此它应该是:
public Item GetItem(string name)
{
}
现在,由于mItems
是数组,因此您应该使用一些循环运算符(for或foreach)对其进行迭代。使用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;
}
}