C# LINQ表达式复制select上的值,而不是循环它们

C# LINQ表达式复制select上的值,而不是循环它们,c#,linq,class,datagrid,anonymous-types,C#,Linq,Class,Datagrid,Anonymous Types,我有一个类来存储有关文件夹中包含的文件的一些信息: static class fileList { public static IEnumerable<files> fL; } public class files { private static string _name = ""; private static long _size; private static DateTime _creationDate; public strin

我有一个类来存储有关文件夹中包含的文件的一些信息:

static class fileList
{
    public static IEnumerable<files> fL;
}

public class files
{
    private static string _name = "";
    private static long _size;
    private static DateTime _creationDate;

    public string name
    {
        get { return _name; }
        set { _name = value; }
    }

    public long size
    {
        get { return _size; }
        set { _size = value; }
    }

    public DateTime creationDate
    {
        get { return _creationDate; }
        set { _creationDate = value; }
    }
}
现在,返回的结构将是文件夹中(示例)3个文件的IEnumerable

到目前为止,一切正常。当我尝试返回声明的类型而不是匿名类型时,问题就出现了

var fL = Directory.EnumerateFiles(folder, "*.*", SearchOption.AllDirectories);
        fileList.fL = fL.Select(x => new files()
            {
                name = x.ToString(),
                size = new FileInfo(x).Length,
                creationDate = new FileInfo(x).CreationTime
            });
这将返回3个IEnumberable项目,但所有项目都包含完全相同的信息。据我所知,这是EnumerateFiles方法返回的最后一个文件条目


我希望返回类型的原因是,这些信息将进入DataGridView,如果数据源是匿名类型,则无法执行任何更改,因为该类型是只读的。

您的
文件中有静态变量

private static string _name = "";
private static long _size;
private static DateTime _creationDate;

静态类成员为类的所有实例共享,因此当您设置
name=“fielname”
时,所有实例都将为
name
属性返回
“filename”
。为什么需要这个静态字段?

您似乎没有完全理解
static
-修饰符是关于什么的。简而言之,当一个成员属于一个类的所有实例时,就使用它,而非静态意味着类的每个实例(无论何时编写
新文件()
)都有自己的成员值。在您的例子中,静态结果是类的所有实例都具有相同的值,这些值来自
fileList.Fl
-集合的上一次迭代。您还可以进一步查看

如上所述,您的问题可以通过从支持字段中删除
static
-修饰符来解决,其他人也提到了这一点


除此之外,您还应该了解,例如,使用CamelCase编写的类名-例如class
Files
,而不是
Files
,甚至更好-因为实际上您的类的每个实例都代表一个单独的文件,只需使用
file
。类似地,将
文件列表
重命名为
文件列表
,将所有公共成员也重命名为CamelCase。

是否尝试从支持字段中删除静态修饰符?
private static string _name = "";
private static long _size;
private static DateTime _creationDate;