Solved

C#, Generic, Reuse of file enumeration

Posted on 2009-05-13
2
257 Views
Last Modified: 2013-12-17
I'm trying to use my FileWorks class below to tell me if a directory has a certain file extension.
I'm trying to be as generic as possible and reuse the function...
GetFilesDoSomething

I'm not sure how to approach this one. This is the code I have below.

Does not look like it would work if I were to call it...

FileWorks filework = new FileWorks();
filework.GetFilesDoSomething(directory, CheckDirectoryForFilesWithExtension);

How can I pass the bool result back accross soo many functions?


public class FileWorks
    {
 
        bool CheckDirectoryForFilesWithExtension(FileInfo fi)
        {
            if (fi.Extension == "tif")
            {
                return true;
            }
        }
 
 
        public void GetFilesDoSomething(string DirName, Action<FileInfo> method)
        {
            DirectoryInfo d = new DirectoryInfo(DirName);
            FileInfo[] f = d.GetFiles();
 
            foreach (FileInfo fi in f)
            {
                method.Invoke(fi);
            }
        }
     }

Open in new window

0
Comment
Question by:silentthread2k
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
2 Comments
 
LVL 16

Expert Comment

by:ToddBeaulieu
ID: 24377680
This looks like delegates 101, not generics.

Check this out:

http://www.experts-exchange.com/Programming/Languages/C_Sharp/Q_24247143.html


0
 
LVL 33

Accepted Solution

by:
Todd Gerbert earned 500 total points
ID: 24378736
This codes isn't really "proper", but it does demonstrate using a delegate to make your GetFilesDoSomething() re-usable.
class Program
{
	static void Main(string[] args)
	{
 
 
		FileWorks.GetFilesDoSomething("C:\\", new FileWorks.SomethingDelegate(FileWorks.CheckDirectoryForFilesWithExtension));
 
		Console.ReadKey();
	
	}
 
}
 
public static class FileWorks
{
	public delegate void SomethingDelegate(object inParam, out object returnVal);
 
	public static void CheckDirectoryForFilesWithExtension(object fi, out object returnValue)
	{
		if (((FileInfo)fi).Extension.ToLower() == ".tif")
			returnValue = true;
		else
			returnValue = false;
 
		return;
	}
 
	public static void GetFilesDoSomething(string dirName, SomethingDelegate method)
	{
		DirectoryInfo d = new DirectoryInfo(dirName);
		FileInfo[] f = d.GetFiles();
 
		foreach (FileInfo fi in f)
		{
			object returnValue;
			method(fi, out returnValue);
 
			Console.WriteLine("{0} is a TIF: {1}", fi.Name, (bool)returnValue);
		}
	}
}

Open in new window

0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
In a recent question (https://www.experts-exchange.com/questions/29004105/Run-AutoHotkey-script-directly-from-Notepad.html) here at Experts Exchange, a member asked how to run an AutoHotkey script (.AHK) directly from Notepad++ (aka NPP). This video…
I've attached the XLSM Excel spreadsheet I used in the video and also text files containing the macros used below. https://filedb.experts-exchange.com/incoming/2017/03_w12/1151775/Permutations.txt https://filedb.experts-exchange.com/incoming/201…

735 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question