|
great subject.
urgent, did you say urgent? I'll put it at the bottom of my inbox then.
Luc Pattyn [Forum Guidelines] [My Articles]
This month's tips:
- before you ask a question here, search CodeProject, then Google;
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get;
- use PRE tags to preserve formatting when showing multi-line code snippets.
|
|
|
|
|
bufff.... urgent....!!! i'll request oxford dictionary to remove this word
TVMU^P[[IGIOQHG^JSH`A#@`RFJ\c^JPL>;"[,*/|+&WLEZGc`AFXc!L
%^]*IRXD#@GKCQ`R\^SF_WcHbORY87??6?N8?BcRAV\Z^&SU~%CSWQ@#2
W_AD`EPABIKRDFVS)EVLQK)JKSQXUFYK[M`UKs*$GwU#(QDXBER@CBN%
Rs0~53%eYrd8mt^7Z6]iTF+(EWfJ9zaK-i?TV.C\y<p?jxsg-b$f4ia>
--------------------------------------------------------
128 bit encrypted signature, crack if you can
|
|
|
|
|
We know it's a C# question. This is the C# forum.
Next time, read the forum guidelines and give your posts more meaningful names.
Paul Marfleet
"No, his mind is not for rent
To any God or government"
Tom Sawyer - Rush
|
|
|
|
|
pmarfleet wrote: We know it's a C# question. This is the C# forum.
Can't guarantee that around here
only two letters away from being an asset
|
|
|
|
|
Nath wrote: please help urgent
Shame on you. That is considered rude around here...
|
|
|
|
|
Hi All,
I've been looking at this for a few hours now, tried a few things I've read on the web with not much luck and I'm a git lost, I've never done this before and I'm getting a bit confused by the examples I've read online to be honest. How do I implement IEnumerable<t> on this code:
class BuildGenericLists : IEnumerable<T>
{
public struct Filelist
{
public string file_name, file_size, file_ext, last_access;
public Filelist(string fileName, string fileSize, string fileExt, string lastAccess)
{
file_name = fileName;
file_size = fileSize;
file_ext = fileExt;
last_access = lastAccess;
}
}
public static object BuildMainFileList()
{
List<filelist> MainFileTableObject = new List<filelist>();
MainFileTableObject.Add(new Filelist(@"G:\Jammer1\", "2132987KB", ".WAV", "12/12/2001"));
MainFileTableObject.Add(new Filelist(@"G:\Jammer2\", "2132987KB", ".AIF", "12/12/2002"));
MainFileTableObject.Add(new Filelist(@"G:\Jammer3\", "2132987KB", ".PRG", "12/12/2003"));
MainFileTableObject.Add(new Filelist(@"G:\Jammer4\", "2132987KB", ".ASD", "12/12/2004"));
MainFileTableObject.Add(new Filelist(@"G:\Jammer5\", "2132987KB", ".WAV", "12/12/2005"));
MainFileTableObject.Add(new Filelist(@"G:\Jammer6\", "2132987KB", ".WAV", "12/12/2006"));
return MainFileTableObject;
}
}</filelist></filelist>
Should the
: IEnumerable<T>
actually be on the following line instead?
public static object BuildMainFileList();
Once this has been inherited how would the code for the GetEnumerator() / Current / Move Next be inserted into the code?
Sorry I know this is going back to basics for most of you but help a newbie The examples on the net all seem to differ and I can't work out what is needed and what isn't needed as there seems to be a difference between the generic implementation and other implementations.
TIA,
James.
|
|
|
|
|
List<Filelist> list = new List<Filelist>();
only two letters away from being an asset
|
|
|
|
|
Hi,
Damn, I'm still getting used to the posting code bit ...
My code is already contains:
List<Filelist> MainFileTableObject = new List<Filelist>();
I'm just struggling with where to put the GetEnumerator() code and the other features on the IEnumerable interface methods. I'm really stuck on this and have been going round in circles all day trying to get to grips with it.
Thanks,
|
|
|
|
|
Hi,
I've got this to compile now but how do I know if this is actually implementing IEnumerable?
class BuildGenericLists : IEnumerable
{
public struct Filelist
{
public string file_name, file_size, file_ext, last_access;
public Filelist(string fileName, string fileSize, string fileExt, string lastAccess)
{
file_name = fileName;
file_size = fileSize;
file_ext = fileExt;
last_access = lastAccess;
}
}
public static object BuildMainFileList()
{
List<Filelist> MainFileTableObject = new List<Filelist>();
return MainFileTableObject;
}
public IEnumerator GetEnumerator()
{
return (IEnumerator)this;
}
}
Using breakpoints I can't see the program ever hitting the return (IEnumerator)this; line. I'm feeling pretty dumb at the moment. I thought I was starting to get a grip of C# basics but I'm stumped on this at the moment.
|
|
|
|
|
the
code fragment
public IEnumerator GetEnumerator ()
{
return (IEnumerator ) this;
}
is an infinite loop . this is not going to work .
try
public IEnumerator GetEnumerator ()
{
return MainFileTableObject ;
}
Ilist already implement inumerable .
Enumerable is little complicated at start . but then get it .
you can also use
public IEnumerator GetEnumerator ()
{
foreach ( FileList fileList in MainFileTableObject )
yield return fileList ;
}
// i have not installed Visual Studio right now and dont test sysntax
f(yf) = yf
|
|
|
|
|
Ahhhh ... Thanks for the reply. Just before your reply came through I was repeatedly trying the code in various configs and then noticed that hovering over my code I now say that the class was getting an IEnumerable added but with the following error when I expanded the node:
base {System.Exception} = {"Unable to cast object of type 'SampleSort.DataLayer.BuildGenericLists' to type 'System.Collections.IEnumerator'."}
Changing to your suggestion:
public IEnumerator GetEnumerator ()
{
return MainFileTableObject ;
}
Now makes the compiler report:
Cannot implicitly convert type 'System.Collections.Generic.List<samplesort.datalayer.buildgenericlists.filelist>' to 'System.Collections.IEnumerator'. An explicit conversion exists (are you missing a cast?)</samplesort.datalayer.buildgenericlists.filelist>
I'm assuming that's progress!
I've seen examples using this yield keyword, that's new to C# 3.0 isn't it? (Which I'm using) so it would be good to implement the newer way of doing things.
I'm sure this is also due to my shallow understanding at the moment but my code is just producing an empty generic list so doing a foreach over it will add what exectly? Or is this code here in order to build in that functionality to the object rather than actually perform a foreach on an empty list?
Thanks loads for your help.
|
|
|
|
|
Using:
public IEnumerator GetEnumerator()
{
foreach (Filelist fileList in MainFileTableObject)
yield return fileList;
}
Doesn't produce the compile error!! Hmm ...
You right, this has been a complicated issue for me to get my head around. Hopefully this is going to work and I can move onto the next thing I don't understand yet!
|
|
|
|
|
Implementing IEnumerable , IEnumerator or even Ilist , ICollection is suppose to be an advance topic so you are excuse not o no .i had the same problem .
keep programming . if you stack someware else make a question
f(yf) = yf
|
|
|
|
|
That is reassuring to know. I had made the assumption this was a pretty basic function of C# as Generics are used a lot as is the foreach functionality.
I guess I'm making a bit more progress than I was giving myself credit for.
Thanks for this papadimitriou, you've been a great help.
|
|
|
|
|
OK, I know it wasn't very long but i'm stuck again ... I now need to write a custom Add() method to add records to this Custom Generic List, really don't know where to start really.
My code runs this line:
BuildGenericLists SingleDirectoryFileStore = new BuildGenericLists();
Which executes:
class BuildGenericLists : IEnumerable
{
public struct Filelist
{
public string file_name, file_size, file_ext, last_access;
public Filelist(string fileName, string fileSize, string fileExt, string lastAccess)
{
file_name = fileName;
file_size = fileSize;
file_ext = fileExt;
last_access = lastAccess;
}
}
List<Filelist> MainFileTableObject = new List<Filelist>();
public IEnumerator GetEnumerator()
{
foreach (Filelist fileList in MainFileTableObject)
yield return fileList;
}
public void Add()
{
}
}
How would I go about fleshing out the stubbed Add() method so that after the initial line above to create the list I can issue add commands to add the relevant values to the list?
MainFileTableObject.Add(new Filelist(@"G:\Jammer1\", "2132987KB", ".WAV", "12/12/2001"));
TIA,
|
|
|
|
|
Hi Again,
Any help on this would be really appreciated.
Thanks,
James.
|
|
|
|
|
can you tell us why you want to implement your own IEnumerable type? what special functionality is needed?
seems like system.collectionn.generic.list would do the job for you.
|
|
|
|
|
Hi,
Sure, I'm new to C# so bear with me.
Basically, my list is eventually going to contain strings, bools, dates, ints, doubles etc ... all sorts basically and I was advised that a generic list would be the way forward and that in order to accommodate those different data types in one list I would need to go down this route ...
Also the IEnumerable is required in order to subsequently bind this to an Infragistics datagrid in the application interface.
Am I barking up the wrong tree going down this route?
Thanks for the reply!
James.
|
|
|
|
|
hm..i'm still not sure if you got it now (looking at the other replies).
using a generic collection is mainly useful to have a container with elements of the same type. if you want a list with almost any datatype in it, generics is not helpful.
using List<string> list = new List<string>(); will create a list containing only strings. so list.Add will only allow you to add strings and getting elements of this list will always return a string.
if all you want is a collection of FileList instances, use List<FileList>. you will not need to implement ienumerable. if you want a collection of instances of any type, use untyped system.collection.list.
you may also want to specify what concrete data you want to hold in that collection, so a better advise can be given.
|
|
|
|
|
Hi buchstaben,
This is what I have now (got it working last night):
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SampleSort.DataLayer
{
public class BuildFileList<T> : IEnumerable<T>
{
private List<T> fileList = new List<T>();
public T Get(int pos)
{
return fileList[pos];
}
public void Add(T c)
{
fileList.Add(c);
}
public void Clear()
{
fileList.Clear();
}
public int Count
{
get { return fileList.Count; }
}
IEnumerator<T> IEnumerable<T>.GetEnumerator()
{
return fileList.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return fileList.GetEnumerator();
}
}
public class FileEntry
{
private string _fileName;
private string _fileSize;
private string _fileExt;
private string _fileDate;
public FileEntry(string _fileName, string _fileSize, string _fileExt, string _fileDate)
{
this._fileName = _fileName;
this._fileSize = _fileSize;
this._fileExt = _fileExt;
this._fileDate = _fileDate;
}
public string FileName
{
get { return _fileName;}
set {_fileName = value;}
}
public string FileSize
{
get { return _fileSize; }
set { _fileSize = value; }
}
public string FileExt
{
get { return _fileExt; }
set { _fileExt = value; }
}
public string FileDate
{
get { return _fileDate; }
set { _fileDate = value; }
}
}
}
Like I said even though this is only using strings at the moment its going to be expanded to include other value types (bool, ints, double etc...)
This is being used by:
public static List<FileEntry> ScanDirectories(string scanEntryPoint)
{
List<FileEntry> SingleDirectoryFileStore = new List<FileEntry>();
DirectoryInfo StartDir = new DirectoryInfo(scanEntryPoint);
GetDirectoryFiles(SingleDirectoryFileStore, StartDir);
return SingleDirectoryFileStore;
}
This is just a basic file recursion thing (not all code included) and is being initiated by a button in a user control:
private void btnScanDirectory_Click(object sender, RoutedEventArgs e)
{
object SingleDirectoryResults = SampleSort.DataLayer.ScanSingleDirectoryForFiles.ScanDirectories(@"G:\samples\evolution\Drumloops Construction");
}
I'm just having real problems now binding SingleDirectoryResults to the WPF interface. All the binding examples I have seen link into a class (such as BuildFileList) which in my case is an empty definition of an object. My brain hurts ..I've only been using C# for a matter of weeks after years of FoxPro ...
Thanks in advance for any input you have.
James.
|
|
|
|
|
in the code you provided, i cant see any use of your class BuildFileList (thats good, since i still believe it is not needed in your case).
i've never worked with WPF, but i think i can give you a hint anyway.
first, in your button click event handler, dont specify the return value as object. you know it is a List<FileInfo>, so you can use it.
to bind this to your ui control, you have to tell the control the bound type. this will be FileEntry, since FileEntry contains the relevant information, not your list.
let's take a gridview as user control. Each row will represent a FileEntry, so you need to specify FileEntry as bound type. if you do that at design time, your gridview will autmatically get columns for each property of FileEntry.
having this done, simply say myGridView.DataSource = singleDirectoryResults (assuming that singleDirectoryResults is of type List<FileInfo>.
Jammer wrote: All the binding examples I have seen link into a class (such as BuildFileList) which in my case is an empty definition of an object.
you will need to linke to FileEntry class.
hope this is not too weird, since i dont have any dev environment here.
|
|
|
|
|
Thanks for this ... I'm just off making some changes and trying a few things you suggest. Thank!
|
|
|
|
|
You should implement the IEnumerator for the data type that it should enumerate:
class BuildGenericLists : IEnumerable<FileList>
You don't have to create an enumerator, the List class already has one that you can return when you implement the GetEnumerator method:
return MainFileTableObject.GetEnumerator();
Despite everything, the person most likely to be fooling you next is yourself.
|
|
|
|
|
So can a standard List<> hold values of string, int, bool etc at the same time? I was of the impression that a I needed to 'design' my own List<> in order to do this?
|
|
|
|
|
A List<object> can hold any kind of data.
You might want to inherit or encapsulate the list and implement some methods to simplify dealing with different objetcs.
Another alternative is to create a class that encapsulates an object reference and has methods to handle the different kind of data, and make a list containing items of that class.
Despite everything, the person most likely to be fooling you next is yourself.
|
|
|
|
|