我正在尝试使用IndexOf从列表“ numbers”中检索一个int,但它不接受变量“ which”并给出此错误:
Error CS1503 Argument 1: cannot convert from 'int' to 'project.Number
这里是创建我们要搜索的列表并声明which变量的类。
Class PhoneBook {
private int which { get; set; }
public List<Number> numbers { get; } = new List<Number>();
public Phonelist(int count, int ui)
{
for (int i = 0; i < count; i++)
{
numbers.Add(new Number(ui));
}
SwitchNumbers();
userInput = DisplayMenu.CheckUser();
which = 0;
Console.WriteLine("Please select one phone number you would like to hold.");
which = Convert.ToInt32(Console.ReadLine());
SavedPhoneNumber(which);
}
这是上面的类调用搜索列表的方法。 (并给出错误)
public void SavedPhoneNumber(int which)
{
int index = numbers.IndexOf(which);
Console.WriteLine(index);
}
这里是错误所引用的project.Number类。
class Number
{
private Random rnd;
public int Current { get; private set; }
public Number()
{
Current = 0;
rnd = new Random(Guid.NewGuid().GetHashCode());
FRoll();
}
public int FRoll()
{
Current = rnd.Next(1, 7);
return Current;
}
public override string ToString()
{
return Current.ToString();
}
}
我已经尝试使用convert类,以确保它是一个int,无济于事。
由于此错误使我感到难为情,因此我们非常感谢任何反馈。
对于IndexOf方法,每documentation:
返回列表中或其一部分中第一次出现的值的从零开始的索引。
意思是,List.IndexOf的参数期望类型为T,在您的情况下为类型Number
。然后,它返回找到该值的第一个索引。但是您的代码正在将其传递为int
类型。
尚不清楚您想用此代码实现什么,但我想有两种选择:
which
的元素。 which
的数字的索引。 我希望您想要#1,因为#2在我看来很奇怪,特别是因为Number不能将Current的值设置为已定义的值。
如果要#1,请使用语法numbers[which]
。但是要小心-您的代码没有进行任何检查,以确保which
的值是否是列表中将存在的索引。如果索引超出范围,则可能会出现异常。
如果您确实想要#2(并且您提供了某种方法来将Current的值设置为固定值),则可以使用IndexOf,但是要注意:根据相同的文档,IndexOf使用默认的EqualityComparer作为您的类型。由于未定义重写Object.Equals()方法,并且Numbers
是类(引用类型),因此可能无法获得期望的相等性。有关类的默认相等行为的某些信息,请参见here(但也可以在网络上搜索)。基本上,除非您自己有完全相同的对象放入列表中(参考匹配),否则您将获得匹配,除非您自己实施相等性检查。