Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.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# 分类列表和Linq_C#_Sortedlist - Fatal编程技术网

C# 分类列表和Linq

C# 分类列表和Linq,c#,sortedlist,C#,Sortedlist,在阅读了关于将Linq与SortedList一起使用时会发生什么的文档后,我感到困惑 我猜枚举肯定是按索引排序和检索的,但是值和键呢?这些箱子都安全吗 var list = new SortedList<DateTime, object>(); //add entries here ... var firstValue1 = list.Values[0]; var firstValue2 = list.First(

在阅读了关于将Linq与SortedList一起使用时会发生什么的文档后,我感到困惑

我猜枚举肯定是按索引排序和检索的,但是值和键呢?这些箱子都安全吗

        var list = new SortedList<DateTime, object>();

        //add entries here ...

        var firstValue1 = list.Values[0];
        var firstValue2 = list.First().Value;
        var firstValue3 = list.Values.First();

        var firstKey1 = list.Keys[list.Count-1];
        var firstKey2 = list.First().Key;
        var firstKey3 = list.Keys.First();

        var sortedList = list.Where(x => x.Key > DateTime.Now)
            .Select(x => x.Value);
var list=new SortedList();
//在此处添加条目。。。
var firstValue1=list.Values[0];
var firstValue2=list.First().Value;
var firstValue3=list.Values.First();
var firstKey1=list.Keys[list.Count-1];
var firstKey2=list.First().Key;
var firstKey3=list.Keys.First();
var sortedList=list.Where(x=>x.Key>DateTime.Now)
.选择(x=>x.Value);

阅读文档

从:

“IList
IList
中的值顺序与
SortedList
中的值顺序相同。”

从:

“IList
IList
中键的顺序与
SortedList
中键的顺序相同。”


阅读文档

从:

“IList
IList
中的值顺序与
SortedList
中的值顺序相同。”

从:

“IList
IList
中键的顺序与
SortedList
中键的顺序相同。”


您可以在此处查看源代码:

显然,
Keys
属性只是此类实例的包装器:

如果查看
GetEnumerator()
方法,可以看到它创建了一个
SortedListKeyEnumerator
。以下是这方面的源代码:

据我所知,它的
MoveNext()
只是通过包含的
SortedList
的键进行迭代


您可以找到
值的工作方式。

您可以在此处查看源代码:

显然,
Keys
属性只是此类实例的包装器:

如果查看
GetEnumerator()
方法,可以看到它创建了一个
SortedListKeyEnumerator
。以下是这方面的源代码:

据我所知,它的
MoveNext()
只是通过包含的
SortedList
的键进行迭代


您可以找到与
工作原理相同的方法。

如果查看Enumerable.cs的源代码,您将看到没有谓词的重载只是尝试将源代码视为IList,如果这不起作用,它将使用枚举器返回第一个元素。索引和枚举数都应该由SortedList类在内部处理,以便获得适当的(排序的)结果:

publicstatictsource优先(此IEnumerable源){
if(source==null)抛出错误.ArgumentNull(“source”);
IList list=源作为IList;
如果(列表!=null){
如果(list.Count>0)返回列表[0];
}
否则{
使用(IEnumerator e=source.GetEnumerator()){
如果(e.MoveNext())返回e.Current;
}
}
抛出错误。NoElements();
}
谓词重载的工作原理稍有不同,它使用枚举器对每个项执行谓词,查找第一个匹配项:

    public static TSource First<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate) {
        if (source == null) throw Error.ArgumentNull("source");
        if (predicate == null) throw Error.ArgumentNull("predicate");
        foreach (TSource element in source) {
            if (predicate(element)) return element;
        }
        throw Error.NoMatch();
    }
publicstatictsource优先(此IEnumerable源,Func谓词){
if(source==null)抛出错误.ArgumentNull(“source”);
if(predicate==null)抛出Error.ArgumentNull(“predicate”);
foreach(源中的TSource元素){
if(谓词(元素))返回元素;
}
抛出错误。NoMatch();
}

无论哪种方式,您都应该得到相同的(排序)结果。

如果查看Enumerable.cs的源代码,您将看到没有谓词的重载只是尝试将源代码视为IList,如果这不起作用,它将使用枚举器返回第一个元素。索引和枚举数都应该由SortedList类在内部处理,以便获得适当的(排序的)结果:

publicstatictsource优先(此IEnumerable源){
if(source==null)抛出错误.ArgumentNull(“source”);
IList list=源作为IList;
如果(列表!=null){
如果(list.Count>0)返回列表[0];
}
否则{
使用(IEnumerator e=source.GetEnumerator()){
如果(e.MoveNext())返回e.Current;
}
}
抛出错误。NoElements();
}
谓词重载的工作原理稍有不同,它使用枚举器对每个项执行谓词,查找第一个匹配项:

    public static TSource First<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate) {
        if (source == null) throw Error.ArgumentNull("source");
        if (predicate == null) throw Error.ArgumentNull("predicate");
        foreach (TSource element in source) {
            if (predicate(element)) return element;
        }
        throw Error.NoMatch();
    }
publicstatictsource优先(此IEnumerable源,Func谓词){
if(source==null)抛出错误.ArgumentNull(“source”);
if(predicate==null)抛出Error.ArgumentNull(“predicate”);
foreach(源中的TSource元素){
if(谓词(元素))返回元素;
}
抛出错误。NoMatch();
}

无论哪种方式,您都应该得到相同的(排序)结果。

@EpicKip它准确地告诉您得到的是什么。枚举中的第一项。在很多情况下,这正是您所需要的。@EpicKip:如果您对基础项一无所知,那么您可能是对的,但在这种情况下,它是一个排序列表。你得到了一个非常具体的东西。最早的项目,最新的项目,得分最高的项目。。。无论您的排序是什么,都定义了第一项是什么。你还会认为编写< C> > OrthBube(x= > x.ToE)是毫无意义的。FrimSt.(?)/Cord>?@ EpicKip。如果你不喜欢使用<代码> SoRealdList,那么就这么说。说先使用
会让你得到一个“随机”元素