0

I am studying C# from the Web and while practicing parameter arrays as argument and delegates and playing around I came up with a piece of code that is a dead end or I don't know how to.

(I am not trying to write anything nor is it for something, I was just studying and writing whatever :) )

Is it possible to pass Methods stored in a list to a Delegate and then invoke?

(ps: plz overlook the fact that I left static out, it won't run like this(or never))

delegate void one();
delegate void two();
delegate void three();
one Del01 = new one(d1);
two Del02 = new two(d2);
three Del03 = new three(d3);

delegate void newD();
newD getdelegatesfromlist;


void Main(string[] args)
{
    List<Delegate> mergedelegates = mergedels(Del01,Del02,Del03);

    foreach(Delegate d in mergedelegates)
    {
        getdelegatesfromlist = new newD(????); 
        //then maybe invoke the delegate?
        getdelegatesfromlist(); //??               

    }
}


List<Delegate> mergedels(params Delegate[] dels)
{
    List<Delegate> dellist = new List<Delegate>();
    foreach(Delegate d in Dels) 
    {
        dellist.Add(d);
    }
    return dellist;
}

void d1(){...}
void d2(){...}
void d3(){...}
Erkan
  • 1
  • 3

2 Answers2

2

Instead of creating a delegate yourself You can simply do it with the following code snippet

void Main(string[] args)
{
    List<Action> mergedelegates = new List<Action> { d1, d2, d3 };

    foreach (Action d in mergedelegates)
    {
        d.Invoke();
    }
}

void d1() {...}
void d2() {...}
void d3() {...}

If you want a function with parameters you can do Action<TYPE1,TYPE2>

If you want a function return value you can use Func<>

Pepernoot
  • 3,409
  • 3
  • 21
  • 46
0

If you want to use list of methods, it is better to use Actions, but if you want to use delegates, this can be done like this:

// creating the main delegates type
delegate void DelegateVoid ();


// declaring delegates
DelegateVoid Del01 = d1;
DelegateVoid Del02 = d2;
DelegateVoid Del03 = d3;

void Main(string[] args)
{
    // looping and invoking delegates
    foreach (DelegateVoid d in mergedels (Del01, Del02, Del03)) {
        d.Invoke ();
    }
}

List<DelegateVoid> mergedels (params DelegateVoid[] dels)
{
    List<DelegateVoid> dellist = new List<DelegateVoid> ();

    foreach (DelegateVoid d in dels) {
        dellist.Add (d);
    }

    return dellist;
}

static void d1 ()
{
    Debug.WriteLine ("Hello 1");
}

static void d2 ()
{
    Debug.WriteLine ("Hello 2");
}

static void d3 ()
{
    Debug.WriteLine ("Hello 3");
}
Markiian Benovskyi
  • 2,137
  • 22
  • 29