C# SortedList出现错误:“quot;不包含Select的定义;
以下建议使用此语法:C# SortedList出现错误:“quot;不包含Select的定义;,c#,linq,C#,Linq,以下建议使用此语法: var result = SortedList.Select(x => new { x.Value.MyProperty, x.Value.AnotherProperty }); 但是,当我尝试测试它时,我收到错误: System.Collections.SortedList不包含Select的定义 我有以下参考资料: using System; using System.Collections; using System.Collection
var result = SortedList.Select(x => new {
x.Value.MyProperty,
x.Value.AnotherProperty
});
但是,当我尝试测试它时,我收到错误:
System.Collections.SortedList
不包含Select
的定义
我有以下参考资料:
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
using System.IO;
尽管进行了广泛的互联网搜索,我还是不知道如何解决这个问题。有人能帮忙吗
编辑:
也许我做得不对。我的目标是将SortedList的子集作为SortedList返回
var subset = data.Where(x => x.Key >= startDate && x.Key <= endDate);
var子集=数据。其中(x=>x.Key>=startDate和&x.KeyLINQ Select方法接收IEnumerable。但是SortedList没有实现这个接口。LINQ Select方法接收IEnumerable。但是SortedList没有实现这个接口。看起来像是将SortedList用作一个静态类,或者您的对象与c命名相同姑娘,不管怎样,这应该行得通:
var myList = new SortedList<int, int>();
var mySelect = myList.Select(x => x.Value);
var myList=new SortedList();
var mySelect=myList.Select(x=>x.Value);
看起来您正在将SortedList用作静态类,或者您的对象与该类的名称相同。无论如何,这应该可以:
var myList = new SortedList<int, int>();
var mySelect = myList.Select(x => x.Value);
var myList=new SortedList();
var mySelect=myList.Select(x=>x.Value);
注意:您最近编辑了您的问题,陈述了真正的问题,这可能会使此答案过时。我发布了一个新的答案来解决“真正”的问题
确保您的项目引用了System.Core.dll
。这是一个.NET程序集,它包含了LINQ对几乎任何集合类型的扩展方法
(这包括Select
,您无法使用SortedList
找到它Select
实际上是在static类中找到的一个静态方法。)
使用
指令确保您至少有以下两个指令(您已经有了):
SortedList
是一个非泛型和非类型的集合,即它只包含对象
s,为了使用LINQ的选择
方法和/或访问元素的值
属性,您首先需要调用LINQ的强制转换
操作符
var result = sortedList.Cast<TItem>().Select(x => new {
x.Value.MyProperty,
x.Value.AnotherProperty
});
var result=sortedList.Cast().Select(x=>new{
x、 Value.MyProperty,
x、 另一个属性的值
});
其中TItem
是SortedList
中项目类型的名称SortedList
引用了一个局部变量、字段或属性,并且没有用作类型名称。这就是为什么我将大小写更改为SortedList
p.p.S.:除非你有充分的理由不这样做,否则如果你使用这门课,生活可能会轻松一些,这里的一些人在我之前已经建议过了
注意:您最近编辑了您的问题,陈述了真正的问题,这可能会使此答案过时。我发布了一个新的答案来解决“真正”的问题
System.Core.dll
。这是一个.NET程序集,它包含了LINQ对几乎任何集合类型的扩展方法
(这包括Select
,您无法使用SortedList
找到它Select
实际上是在static类中找到的一个静态方法。)SortedList
是一个非泛型和非类型的集合,即它只包含对象
s,为了使用LINQ的选择
方法和/或访问元素的值
属性,您首先需要调用LINQ的强制转换
操作符
var result = sortedList.Cast<TItem>().Select(x => new {
x.Value.MyProperty,
x.Value.AnotherProperty
});
var result=sortedList.Cast().Select(x=>new{
x、 Value.MyProperty,
x、 另一个属性的值
});
其中TItem
是SortedList
中项目类型的名称SortedList
引用了一个局部变量、字段或属性,并且没有用作类型名称。这就是为什么我将大小写更改为SortedList
p.p.S.:除非你有充分的理由不这样做,否则如果你使用这门课,生活可能会轻松一些,这里的一些人在我之前已经建议过了
注意:我将此作为一个全新的答案发布,因为最近对您的问题进行的编辑清楚地表明,真正的问题与最初看起来的大不相同
数据
中选择要在结果分类列表中显示的子集
:
我看不到更简单的解决方案。问题是可枚举。其中
将返回一个IEnumerable
,并且没有扩展方法将其转换回SortedList
。因此需要逐项迭代IEnumerable
并将其添加到新的SortedList
何处
以及何时使用选择
:
- 每当您想要查找子集时,即当您想要“筛选”集合时,请使用
。(如果您熟悉SQL,Where
对应于Where
,因此得名。)Where
- 当您想将集合中的每个元素更改/转换或“投影”为其他元素时,请使用
。在函数式编程中,此操作通常称为“映射”。(同样,如果您熟悉SQL,则Select
——毫不奇怪——对应于Select
)Select
数据。其中(x=>x.Key>=…)
:
var subset = from x in data
where x.Key >= …
select x
这是真的
var sortedListSubset = new SortedList<DateTime, BarData>();
foreach (var subsetItem in subset)
{
sortedListSubset.Add(subsetItem.Key, subsetItem.Value);
}
var subset = from x in data
where x.Key >= …
select x