如何返回/工作/处理LINQ查询列表结果?

时间:2016-03-13 03:09:13

标签: c# performance linq foreach return

My class:
    public class Definitions
{
    public string Name { get; set; }
    public string Id { get; set; }
}

我到目前为止管理了这个: 如果我理解我的结果  Definitions.Name ..and  Definitions.Id

全部保存在List obejct中!? (多数民众赞成我想得到的东西,它有效,因为我可以用foreach访问它)

    public static void ReadDefinitions2()
    {
        var files = (from name in Directory.EnumerateFiles(Settings.NotecadddyDefinitionsFolder)
                     select new Definitions 
                     {
                         Name = Path.GetFileNameWithoutExtension(name),
                         Id = File.ReadLines(name).Skip(2).First()
                     }).ToList();

        foreach (Definitions f in files)
        {
            Console.WriteLine(f.Name);
            Console.WriteLine(f.Id);
        }
    }

++ 1。题: 来自哪里? 我从网上得到了部分片段,...所以我真的不理解它100%。

++ 2.Question: 为什么我不能使用

    Id = File.ReadLines(name).Skip(2).Take(1)

而不是:

    Id = File.ReadLines(name).Skip(2).First()

错误: Der Typ“System.Collections.Generic.IEnumerable”kann nicht implizit in“string”konvertiert werden。 我知道First已经是最优的,但我只是想明白,因为对我来说它是一样的!?拿1 =!先拿????

++ 3.Question:我的List Object / variabel是什么东西? 定义f或文件?

我做了一些性能测试,有3.000个文件,一个25KB~130ms ......内部VS.(debug / release = same) 好像。 现在当我不添加.ToList();并且不做“foreach”,然后时间= 0ms。 (如果我理解正确,它基本上什么都不做,因为没有结果) -withToList()“它总是130ms,无论是foreach还是no。

那么我的结果/变量/列表究竟是什么? .ToList()做了什么,因为我可以用foreach处理我的List?

++ 4.Question:(相关)

我有一个对象定义f.Name AND                    定义f.Id 在某种数组/列表中?

++ 5.Question: 如何将其返回主程序? 我会一直使用这个列表。这是我需要的那个对象/类的唯一实例。

尝试了许多事情......没有任何作用: 返回xxxx; ?? 以及如何启动该方法?请完整示例如:

   static void Main()
    {
    Definitions=ReadDefinitions2();
    }

public static ReadDefinitions2()
{
return Definitions Object(Name and ID):
}

1 个答案:

答案 0 :(得分:1)

我会一次尝试解释每个问题。

  

问题:来自哪里?我得到了片段   网,...所以我真的不明白。

在这种情况下,

文件是List Definitions,要访问列表中您必须循环遍历项目的每个定义,f是指向定义的变量/引用。

  

问题:为什么我不能使用Id = File.ReadLines(name).Skip(2).Take(1)

First()返回单个/ Definitions,其中Take返回IEnumerable,这就是您看到错误的原因。您可以执行此操作Id = File.ReadLines(name).Skip(2).Take(1).First()

  

问题:我的List Object / variabel是什么东西?定义f或文件?

Definitions,您之前的Linq查询构建Definitionsselect new Definitions

关于效果,在第一种情况下,您创建的是Enumeration,而不是物理List,这就是您注意0ms的原因。

  

问题:我有一个对象定义f.Name和定义f.Id   在某种数组/列表中?

我认为Defintions是用户定义的类型,您可能在代码中使用它(不确定它是否在问题中)。

  

问题:如何将其返回主程序?我将使用此列表   每时每刻。这是我需要的那个对象/类的唯一实例。

修改方法签名以返回List<Definitions>并将值返回给调用者。

public static List<Definitions> ReadDefinitions2()
{
    var files = (from name in Directory.EnumerateFiles(Settings.NotecadddyDefinitionsFolder)
                 select new Definitions 
                 {
                     Name = Path.GetFileNameWithoutExtension(name),
                     Id = File.ReadLines(name).Skip(2).First()
                 }).ToList();

    foreach (Definitions f in files)
    {
        Console.WriteLine(f.Name);
        Console.WriteLine(f.Id);
    }
    return files;
}

现在在Main方法

static void Main()
{
   var definitions=ReadDefinitions2();
   // place your logic
}