【问题标题】:how to return/work/process a LINQ-Query List result?如何返回/工作/处理 LINQ 查询列表结果?
【发布时间】:2016-06-28 05:16:07
【问题描述】:
My class:
    public class Definitions
{
    public string Name { get; set; }
    public string Id { get; set; }
}

到目前为止,我做到了: 如果我正确理解我的结果 定义.名称..和 定义.Id

都保存在一个列表对象中!? (这就是我想要得到的,而且它有效,因为我可以使用 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。题: f从哪里来??? 我从网上获得了部分 sn-p,所以我不是 100% 真正理解它。

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

    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.问题:我的列表对象/变量是什么? 文件的定义?

我对 3.000 个文件进行了一些性能测试,时间为 25KB~130 毫秒...在 VS 中。(调试/发布=相同) 看起来不错。 现在当我不添加 .ToList();并且不做“foreach”,然后时间=0ms。 (如果我理解正确,它基本上什么都不做,因为没有结果) - 使用 ".ToList()" 它总是 130 毫秒,无论是否使用 foreach。

那么我的结果/变量/列表到底是什么? .ToList() 有什么作用,因为我可以使用 foreach 处理我的列表?

++4.问题:(相关)

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

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

尝试了很多东西..没有任何效果: 返回 xxxx;?? 以及如何启动该方法?请完整示例:

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

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

【问题讨论】:

    标签: c# performance linq foreach return


    【解决方案1】:

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

    问题:f 是从哪里来的???我从 net,...所以我不太明白。

    在这种情况下,文件是 DefinitionsList,要访问列表中的每个定义,您必须遍历项目,f 是指向定义的变量/引用。

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

    First() 返回单个/一个 Definitions,而 Take 返回 IEnumerable,这就是您看到错误的原因。你可以这样做Id = File.ReadLines(name).Skip(2).Take(1).First()

    问题:我的列表对象/变量是什么?文件的定义?

    Definitions,您之前的 Linq 查询构造 Definitions (select 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
    }
    

    【讨论】:

    • 哇,谢谢。我重新阅读了 MSDN 上的枚举部分,现在我想我试着理解它:)))
    • 没问题,我很高兴它有帮助。
    • ups.....你不能按回车键:( 好的,我现在可以在 main: Console.WriteLine(definitions); 中访问它;但是如何访问单个值 Name 和 ID?Console。 WriteLine(definitions); foreach (Definitions in definitions) { Console.WriteLine(f.Name); Console.WriteLine(f.Id); } 不起作用!但我可能很接近 ;)
    • 使用这个...foreach (Definitions d in definitions) { Console.WriteLine(d.Name); Console.WriteLine(d.Id); }
    • jaaaaaaaaaaaaaa :))) 太棒了....我想我有一个基本的了解和最小的工具集可以继续 :))) 但它又是这个神秘的“d”。据我了解,它是一个时间变量,它必须是与数据类型相同的第一个字母,在我的情况下是自定义类定义。在 MSDN 示例中,它们未显示。什么时候用什么时候不用?
    猜你喜欢
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多