【发布时间】:2015-01-15 21:52:17
【问题描述】:
我有以下代码:
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 造成的。
有人知道为什么会发生这个错误以及如何解决它吗?
【问题讨论】:
-
RemoveAll不会返回新列表,它会修改现有列表并返回删除的记录数。 -
您的第二个 LINQ 语句根本不是 LINQ 语句。它所做的只是在列表中调用
RemoveAll -
@dcastro 不是内联 LINQ 语句吗?
-
@mstagg 您可能正在谈论
x => y表达式。这称为 lambda 表达式,它是定义委托的语法,而不是 linq。 LINQ 简单来说就是为所有集合定义的一组扩展方法,例如 Select、Where、OrderBy。这些方法大量使用了 lambda 表达式和委托,为什么你可能会感到困惑
标签: c# linq list collections