我有 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/