Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法隐式转换类型';int';至';System.Collections.Generic.List<;快速测试库存>';_C#_Linq_List_Collections - Fatal编程技术网

C# 无法隐式转换类型';int';至';System.Collections.Generic.List<;快速测试库存>';

C# 无法隐式转换类型';int';至';System.Collections.Generic.List<;快速测试库存>';,c#,linq,list,collections,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.Orde

我有以下代码:

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);
        }
    }
static void Main(字符串[]args)
{ 
List ticker=新列表();
股票代码添加(新股票(“msft”);
股票代码添加(新股票(“acw”);
股票代码添加(新股票(“gm”));
ticker=ticker.OrderBy(s=>s.Name.ToList();
foreach(股票行情)
{
Console.WriteLine(s.Name);
}
Console.WriteLine(“\n”);
ticker=ticker.RemoveAll(s=>s.TickerSymbol==“gm”);
foreach(股票行情)
{
Console.WriteLine(s.Name);
}
}
Stock是一个具有字符串属性TickerSymbol和Name的对象。它还具有双重属性价格、ChangeDollars和ChangePercent

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

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


有人知道为什么会发生此错误以及如何修复它吗?

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

您可能需要删除其
TickerSymbol
gm
的所有股票,然后将它们留在ticker中的股票写入控制台。为此,您可以尝试以下方法:

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

foreach (Stock s in ticker)
{
    Console.WriteLine(s.Name);
}
此外,记录如下:

方法
List.RemoveAll()

删除与定义的条件匹配的所有元素 指定的谓词

其签名如下:

public int RemoveAll(Predicate<T> match)
public int RemoveAll(谓词匹配)
谓词是对方法的委托,如果传递给它的对象与委托中定义的条件匹配,该方法将返回true。当前列表中的元素将分别传递给谓词委托,并且匹配条件的元素将从列表中删除

该方法执行线性搜索;因此,这种方法是一种有效的方法 O(n)操作,其中n是列表的计数属性


RemoveAll
不会返回新列表,它将修改现有列表并返回删除的记录数。您的第二条LINQ语句根本不是LINQ语句。它所做的只是在屏幕上调用
RemoveAll
list@dcastro这不是内联LINQ语句吗?@mstagg您可能在谈论
x=>y
表达式。这叫做lambda表达式,它是定义委托的语法,而不是linq。简单地说,LINQ是为所有集合定义的一组扩展方法,如Select、Where、OrderBy。这些方法大量使用lambda表达式和委托,为什么可能是什么让你困惑啊,谢谢。我不知道我怎么会忽视这一点。有没有关于如何在删除指定对象的情况下返回列表的新实例的提示?@mstagg欢迎您!我很高兴我帮了忙。您可以在调用
RemoveAll
后返回
股票代码。后者将删除所有您不想要的元素。这样做了。谢谢+1.