我有一个字典,其中包含一个字符串作为键,以及一个在发现该字符串时要运行的函数。然后,它传递发现的使用的对象。我只希望在函数体内访问此对象,但不确定如何执行此操作。我认为必须使用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');
答案 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));