emer
emer

Reputation: 53

C# Action<> with Func<> parameter

I have the following method that I can't figure out correct syntax to call:

public T GetAndProcessDependants<C>(Func<object> aquire, 
    Action<IEnumerable<C>, Func<C, object>> dependencyAction) {}

I'm trying to call it like this:

var obj = MyClass.GetAndProcessDependants<int>(() => DateTime.Now, 
    (() => someList, (id) => { return DoSomething(x); }) }

Edited: thx everyone, you guys helped turned on a light bulb in my head. here is what i did:

var obj = MyClass.GetAndProcessDependants<int>(
            () => DateTime.Now,
            (list, f) => 
            {
                list = someList;
                f = id => { return DoSomething(id); };
            });

not sure why i even an issue with this. it's one of those days i guess..

thx

Upvotes: 5

Views: 418

Answers (4)

Jake Kalstad
Jake Kalstad

Reputation: 2065

Right now the function is only accepting a single argument, when it asks for two!

You need to accept a list argument, such as (list, id) => {}

Upvotes: 3

Darin Dimitrov
Darin Dimitrov

Reputation: 1038770

var obj = MyClass.GetAndProcessDependants<int>(
    () => DateTime.Now, 
    (someList, id) => DoSomething(x)
);

Upvotes: 2

James Michael Hare
James Michael Hare

Reputation: 38397

Just looking at the description above, it looks like the call should be:

var obj = MyClass.GetAndProcessDependants<int>(() => DateTime.Now,
    (seq, fun) => { /* do something with seq and fun */ });

The key is since you are passing an Action that takes a Func, the caller is (most likely) going to be the one passing that Func into your Action. So you just specify how that Func is applied to the sequence passed in (if I'm reading the prototype correctly).

Upvotes: 2

SLaks
SLaks

Reputation: 887415

Your lambda syntax is totally wrong.

You need to create a single lambda expression with two parameters:

(list, id) => DoSomething(...)

Upvotes: 3

Related Questions