IndexOf方法不能获得int,string或bool,只能将Null作为其Item参数

问题描述 投票:-1回答:1

我正在尝试使用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,无济于事。

由于此错误使我感到难为情,因此我们非常感谢任何反馈。

c# list indexof
1个回答
0
投票

对于IndexOf方法,每documentation

返回列表中或其一部分中第一次出现的值的从零开始的索引。

意思是,List.IndexOf的参数期望类型为T,在您的情况下为类型Number。然后,它返回找到该值的第一个索引。但是您的代码正在将其传递为int类型。

尚不清楚您想用此代码实现什么,但我想有两种选择:

  1. 您要访问列表中位于索引which的元素。
  2. 您想知道列表中其当前值设置为which的数字的索引。

我希望您想要#1,因为#2在我看来很奇怪,特别是因为Number不能将Current的值设置为已定义的值。

如果要#1,请使用语法numbers[which]。但是要小心-您的代码没有进行任何检查,以确保which的值是否是列表中将存在的索引。如果索引超出范围,则可能会出现异常。

如果您确实想要#2(并且您提供了某种方法来将Current的值设置为固定值),则可以使用IndexOf,但是要注意:根据相同的文档,IndexOf使用默认的EqualityComparer作为您的类型。由于未定义重写Object.Equals()方法,并且Numbers是类(引用类型),因此可能无法获得期望的相等性。有关类的默认相等行为的某些信息,请参见here(但也可以在网络上搜索)。基本上,除非您自己有完全相同的对象放入列表中(参考匹配),否则您将获得匹配,除非您自己实施相等性检查。

© www.soinside.com 2019 - 2024. All rights reserved.