Frage zu Contains in List

10/11/2009 - 11:37 von Dirk Herwig | Report spam
Hallo,

ich habe eine Klasse, welche ich als List<> nutze:

[Serializable]
public class CFileList
{

public CFileList(long fl, string fn, string fd)
{
FileLength = fl;
FileName = fn;
FileTime = fd;
}
public long FileLength = 0; // File Size
public string FileName = string.Empty; // File name
public string FileTime = string.Empty; // File Creation Time UTC

}

Ich möchte geren feststellen, ob der FileName schon existiert, um doppelte
Eintràge in der Liste zu verweiden. Dazu habe ich herausgefunden, dass man
mit Contains dies feststellen kann. Ich weiß leider nicht, wie ich Contains
in meinem Fall anspreche. Ich hatte es so versucht:

string filename = Server.HtmlDecode(node.Attributes["p1"].Value);
FileInfo mediafileinfo = new FileInfo(poolfolder + "\\" + filename);

List<CFileList> cfilelist = new List<CFileList>();
if (cfilelist.Contains(filename))
{
cfilelist.Add(new CFileList(mediafileinfo.Length, filename,
mediafileinfo.LastWriteTimeUtc.ToString("")));
}

An der Stelle mit cfilelist.Contains kommt dann der Fehler.

Gruß

Dirk
 

Lesen sie die antworten

#1 Martin Honnen
10/11/2009 - 11:55 | Warnen spam
Dirk Herwig wrote:
Hallo,

ich habe eine Klasse, welche ich als List<> nutze:

[Serializable]
public class CFileList
{

public CFileList(long fl, string fn, string fd)
{
FileLength = fl;
FileName = fn;
FileTime = fd;
}
public long FileLength = 0; // File Size
public string FileName = string.Empty; // File name
public string FileTime = string.Empty; // File Creation Time UTC

}

Ich möchte geren feststellen, ob der FileName schon existiert, um
doppelte Eintràge in der Liste zu verweiden. Dazu habe ich
herausgefunden, dass man mit Contains dies feststellen kann. Ich weiß
leider nicht, wie ich Contains in meinem Fall anspreche. Ich hatte es so
versucht:

string filename = Server.HtmlDecode(node.Attributes["p1"].Value);
FileInfo mediafileinfo = new FileInfo(poolfolder + "\\" + filename);

List<CFileList> cfilelist = new List<CFileList>();
if (cfilelist.Contains(filename))
{
cfilelist.Add(new CFileList(mediafileinfo.Length, filename,
mediafileinfo.LastWriteTimeUtc.ToString("")));
}

An der Stelle mit cfilelist.Contains kommt dann der Fehler.



Mit List<CFileList> kannst du per Contains nur prüfen, ob ein
CFileList-Objekt in der Liste enthalten ist. Du übergibst aber einen
String an die Contains-Methode.
Versuche es statt mit Contains mit
if (cfilelist.Any(c => c.FileName == filename))

Beachte allerdings, dass du oben direkt nach der Erzeugung einer leeren
Liste per
List<CFileList> cfilelist = new List<CFileList>();
den Test durchführst, da können aber keine Objekte in der List sein.

Und dein Text besagt, dass du Duplikate vermeiden willst, dein Test im
Code per
if (cfilelist.Contains(filename))
scheint aber gerade dann per Add ein Duplikat hinzuzufügen.

Du willst vermutlich also eher
if (!cfilelist.Any(c => c.FileName == filename))
{
// Add hier
}



Martin Honnen MVP XML
http://msmvps.com/blogs/martin_honnen/

Ähnliche fragen