当需要在调用时访问其参数时如何使用Func?

时间:2019-06-10 11:47:53

标签: c# function delegates

我有一个字典,其中包含一个字符串作为键,以及一个在发现该字符串时要运行的函数。然后,它传递发现的使用的对象。我只希望在函数体内访问此对象,但不确定如何执行此操作。我认为必须使用lambda运算符,但我真的不知道如何正确使用它。

public Dictionary<string, Func<object, bool>> stringReceivedRegister;

我的设置

string received_name = StringFormater.GetName(receivedMessage);

object changed_string = openMethod.Invoke(instance, new object[] { receivedMessage });
StringTypes.Instance.stringReceivedRegister[received_name].Invoke(changed_string);

将函数添加到stringReceivedRegister时,如何在传入的函数中访问它?

StringTypes.Instance.stringReceivedRegister.Add("Test", function where i can get access to 'changed string');

2 个答案:

答案 0 :(得分:1)

要将功能添加到stringReceivedRegister,首先需要声明一个方法:

private static bool MyFunction(object x) {
    // ...
}

然后您可以将MyFunction传递给Add

// Note the absence of () after "MyFunction". I am not actually calling it
stringReceivedRegister.Add("Test", MyFunction);

执行此操作时,x参数将指向changed_string

StringTypes.Instance.stringReceivedRegister[received_name].Invoke(changed_string);

必须很长时间声明一个方法很烦人,因此C#3提供了lambda表达式,允许您执行以下操作:

stringReceivedRegister.Add("Test", x => {
    // ...
});

同样,当您使用x调用委托时,changed_string将引用changed_string

答案 1 :(得分:-2)

看下面的代码:

static bool FunctionTest(object o) {
return true;
}
static void Main(string[] args) {
Dictionary<string, Func<object, bool>> dict = new Dictonary<string, Func<object, bool>>();
dict.Add("A", ((obj) => { return false; }));
dict.Add("B", FunctionTest);

Console.WriteLine(dict["A"](1));
Console.WriteLine(dict["B"](1));