c# - 自定义列表和字符串列表的区别

标签 c# linq

我有 2 个列表,第一个是字符串列表,我用 Directory.GetFiles() 方法填充它,第二个列表是自定义列表。我的自定义列表中只有 2 个字段。第一个是 FilePath 第二个是 UniqueID.. 我试图实现的是,我想将字符串列表与自定义列表的 FilePath 字段进行比较。我需要更改。

我已将我的自定义列表转换​​为字符串并尝试了这个解决方案 Difference between two lists 它工作得很好,但就我而言,它对我来说毫无用处。我需要比较不同类型的列表

这是我用作模型的自定义类

public class IndexerListModel
{
    public string FilePath = string.Empty;
    public string uniqueID = string.Empty;
}

这就是我已经尝试过的方式

List<IndexerListModel> T3 = XMLList.Except(WinFileList, new PathComparer()).ToList();

但是因为我没有在我的列表中使用相同的类型,所以它没有用。

我期待得到不同之处,就像一个新列表向我显示列表中的这些“x”项具有不同的文件路径..

我的总体目标是在应用程序启动时获取 Windows 文件夹中的更改。所以我会知道在我的应用程序未启动时添加/删除/更改/重命名了哪些文件

最佳答案

如果我正确理解问题,自定义 <List<IndexerListModel>将包含目录的内容,例如 C:\Windows .

然后我们将使用 var myPathList = Directory.GetFiles(@"C:\Windows").ToList();检索 C:\Windows 的内容当应用程序启动时。

结果将是一个路径列表,不包含在我们的自定义 <List<IndexerListModel>

如果上述假设是正确的,我想出了这个解决方案:

public class IndexerListModel
{
    public string UniqueID { get; set; }
    public string FilePath { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        var myPathList = Directory.GetFiles(@"C:\Windows").ToList();

        List<IndexerListModel> myModelList = new List<IndexerListModel> {
            new IndexerListModel {
            UniqueID= "0001",
            FilePath = @"C:\Windows\bfsvc.exe"
        },
            new IndexerListModel {
            UniqueID= "0002",
            FilePath = @"C:\Windows\diagwrn.xml"
        }
        };

        var result = myPathList.Where(path => !myModelList.Any(model => model.FilePath == path)).ToList();
    }
}

当我运行应用程序时,我的 C:\Windows 中共有 27 个文件。 . - 结果将评估为包含 25 个项目的列表。这意味着自上次执行以来总共添加了 25 个文件。

我们可以更新 List myModelList 以反射(reflect) C:\Windows 中的变化.我会想象 myModelList保存在数据库或文件中以保持持久性。

关于c# - 自定义列表和字符串列表的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54326835/

相关文章:

c# - 使用 TestScheduler 对 Akavache 的缓存行为进行单元测试

C# 打开图片文件夹

c# - ASP.NET 图表值标签

c# - Linq Sql Int null 等于 null。不返回行

c# - 如何过滤列的第一个字符在 EF 和 SQL Server 范围内的行?

Linq 日期时间比较不起作用

c# - 单击按钮进入无限循环(ASP.Net)

c# - LINQ - 嵌套的 where 子句

c# - Linq 查询查找嵌套列表包含序列的匹配项

linq - C# LINQ 在列表中查找重复项