【问题标题】:C# compare string[] array to generic list of objectsC# 将字符串 [] 数组与对象的通用列表进行比较
【发布时间】:2011-11-01 13:22:04
【问题描述】:

如何使用 LINQ 将 string[] 数组中的项目与包含对象的通用列表进行比较?

此通用列表包含名为 picInfo 的对象。 picinfo 类如下所示:

[ProtoContract]
public class PicInfo
{
[ProtoMember(1)]
public string fileName { get; set; }
[ProtoMember(2)]
public string completeFileName { get; set; }
[ProtoMember(3)]
public string filePath { get; set; }
[ProtoMember(4)]
public byte[] hashValue { get; set; }

public PicInfo() { } 
}

string[] 数组包含图片的文件路径。我正在尝试检查通用列表是否已包含此特定图片的路径。

图片的通用列表如下所示:

List<PicInfo> pi = new List<PicInfo>();

如果通用列表已经有该图片,我想从 string[] 数组中删除该项目。

我可以使用 foreach 循环执行此操作,并逐个比较项目。但是如何使用 linq 执行此操作?

提前致谢!

【问题讨论】:

    标签: c# linq generic-list arrays


    【解决方案1】:

    您可以只确定重复项,然后将其删除:

    var duplicates = pi.Where(p => picArray.Contains(p.filePath);
    foreach(string fileName in duplicates)
    {
       //do something
    }
    

    但一种更简洁且更具可读性的方法是使用Except() 并创建一个新数组,尽管这对于创建数组来说会产生更多开销:

    picArray = picArray.Except(pi.Select(p=> p.filePath)).ToArray();
    

    【讨论】:

      猜你喜欢
      • 2018-09-07
      • 1970-01-01
      • 2016-10-17
      • 1970-01-01
      • 2020-12-18
      • 1970-01-01
      • 1970-01-01
      • 2015-09-06
      • 2023-03-23
      相关资源
      最近更新 更多