无法隐式转换类型&#39; int&#39;到&#39; System.Collections.Generic.List <quicktest.stock>&#39; </quicktest.stock>

时间:2014-11-18 16:16:06

标签: c# linq list collections

我有以下代码:

static void Main(string[] args)
    { 
        List<Stock> ticker = new List<Stock>();
        ticker.Add(new Stock("msft"));
        ticker.Add(new Stock("acw"));
        ticker.Add(new Stock("gm"));

        ticker = ticker.OrderBy(s => s.Name).ToList();

        foreach (Stock s in ticker)
        {
            Console.WriteLine(s.Name);
        }

        Console.WriteLine("\n");
        ticker = ticker.RemoveAll(s => s.TickerSymbol == "gm");

        foreach (Stock s in ticker)
        {
            Console.WriteLine(s.Name);
        }
    }

Stock是一个具有字符串属性TickerSymbol和Name的对象。它还具有双重属性Price,ChangeDollars和ChangePercent。

我写的第二个LINQ语句是在消息中抛出一个错误,“不能隐式地将类型'int'转换为'System.Collections.Generic.List'”。我很困惑'int'类型来自何处以及如何修复此错误,因为我在程序中的任何地方都不使用任何int值。

我对LINQ也很新,这是我第一次使用它。这个错误很可能是LINQ错综复杂的结果,我不知道。

任何人都知道为什么会发生这种错误以及如何解决它?

1 个答案:

答案 0 :(得分:11)

您获得的错误是合理的,因为RemoveAll会返回已删除的股票数量。这是一个整数。然后尝试将此分配给名为ticker的变量,该变量包含Stock类型的对象列表。

你可能想要的是删除他们TickerSymbolgm的所有股票,然后将他们留在股票代码中的股票写入控制台。为了做到这一点,你可以试试这个:

// This will remove all the stocks you want.
ticker.RemoveAll(s => s.TickerSymbol == "gm");

foreach (Stock s in ticker)
{
    Console.WriteLine(s.Name);
}

此外,对于记录,正如MSDN中所述:

方法List<T>.RemoveAll()

  

删除符合条件定义的所有元素   指定的谓词。

它的签名如下:

public int RemoveAll(Predicate<T> match)

Predicate<T>是一个方法的委托,如果传递给它的对象与委托中定义的条件匹配,则该方法返回true。当前List的元素分别传递给Predicate委托,并且从List 中删除符合条件的元素。

  

此方法执行线性搜索;因此,这种方法是一种   O(n)操作,其中n是List的Count属性。