我有以下代码:
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的对象。它还具有价格,ChangeDollars和ChangePercent的双重属性。
我写的第二条LINQ语句引发错误消息,“无法将类型'int'隐式转换为'System.Collections.Generic.List'”。我对类型'int'的来源以及如何解决此错误感到困惑,因为我不在程序中的任何地方使用任何int值。
我也是LINQ的新手,这是我第一次使用它。这个错误很可能是由于我不知道的LINQ的复杂性造成的。
任何人都知道为什么会发生此错误,以及如何解决该错误?
您得到的错误是合理的,因为RemoveAll
返回已删除库存的数量。这是一个整数。然后,您尝试将其分配给名为的变量ticker
,该变量包含类型的对象列表Stock
。
你可能想要的是去除所有的股票,他们TickerSymbol
是gm
然后写股票,他们一直留在股票控制台。为此,您可以尝试以下操作:
// 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属性。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句