繁体   English   中英

关于C#使用foreach循环将对象添加到列表中

[英]regarding C# adding objects to list using foreach loop

foreach (string f in fileName)
{
    if (list.Where(p => p.FileName.Trim().Equals(f.Trim(), StringComparison.OrdinalIgnoreCase)).Count() == 0)
    {
        ServerpathID = GetSourceServerPath(projectID, out ServerPath);
        DellDirectory dir = new DellDirectory(ServerPath);
        lstgAFPFileInfo = GetFilesFromSourceServer(new string[] { f }, ServerpathID, SearchOption.TopDirectoryOnly).ToList();

        if (lstgAFPFileInfo.Count() != 0)
        {
            foreach (Service.GAFPFileInfo lstg in lstgAFPFileInfo)
            {
                projectfile.Checksum = string.Empty;
                projectfile.IsAutoDeleted = (autoDelete == true) ? true : false;
                projectfile.Size = lstgAFPFileInfo[0].Size;
                projectfile.IsArchived = false;
                projectfile.ProjectFileId = 0;
                projectfile.Language.LanguageId = 1;
                projectfile.LastModifyDate = lstgAFPFileInfo[0].LastModified;
                projectfile.ProjectPartLink = projectPartLink;
                projectfile.FileName = f;
                list.Add(projectfile);
            }
        }
    }
}

我在string[] filename中有两个文件1.txt2.txt 我将这些文件与db进行比较,并将值转换为lstgAFPFileInfo 它第一次获得文件名1.txt并添加到列表中。 第二次获得值2.txt但是在将文件添加到列表后,它将覆盖值1.txt并再次添加2.txt 现在列表值就像这个list[0]:2.txtlist[1]: 2.txt任何人都可以帮忙吗?

这是因为您的循环不断地反复添加相同的对象,因此您的列表最终会对同一对象进行多次引用。

插图

projectfile = new ProjectFile()添加到循环的顶部以解决此问题。

您似乎每次都在projectfile重用相同的对象。 即使将其添加到列表中,您也会在列表和变量中引用相同的对象,因此在更新其属性时,您将在两个位置更新它。

你需要的只是在你的foreach开头说一句话:

projectfile = new ProjectFileObject();

这将创建一个与已添加到列表中的实例完全分离的新实例。

应该注意的是,在可能需要更复杂的解决方案之前,取决于您对projectfile对象所做的操作,但这突出了您的基本问题。

假设您每次都添加相同的实例,只是覆盖其属性。 你需要

projectfile = new WhateverClassNameProjectFileIs();

在最里面的foreach循环的顶部。

看起来你正在创建一个新的字符串数组foreach f in filename。

foreach (string f in fileName)
{
lstgAFPFileInfo = GetFilesFromSourceServer(new string[] { f }, ServerpathID, SearchOption.TopDirectoryOnly).ToList();

因此,通过foreach的每次迭代,只在该数组中创建f的值。 尝试在循环外部实例化数组,然后在内部添加值f。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM