2011-11-01 54 views
1

如何比較字符串[]數組中的項目與包含使用LINQ的對象的通用列表?C#比較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 [] array包含圖片的文件路徑。即時通訊試圖檢查通用列表是否已經包含此特定圖片的路徑。

圖片的泛型列表如下:

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

如果泛型列表上已經有圖片,我想從String []數組中刪除該項目。

我可以做到這一點使用foreach循環和項目1比較1,但我怎麼能用linq做到這一點?

在此先感謝!

回答

3

你可以只確定副本,然後將其刪除:

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(); 
+0

thnx我會嘗試,如果它的工作,我會把它標記爲已回答。 – Yustme