我怎样才能使这个lambda工作?

Mal*_*ist 1 .net c# lambda

我有这个代码:

        String temp = txtForm.Rtf;

        foreach (ReplaceStrut rs in replaceArray) {
            temp = temp.Replace(rs.getNeedle(), rs.getReplacement());
        }
        if (this.InvokeRequired) {
            this.Invoke(temp => txtForm.Rtf = temp);
        } else {
            txtForm.Rtf = temp;
        }
Run Code Online (Sandbox Code Playgroud)

但它不会编译.它抱怨两件事,"无法将lambda表达式转换为'System.Delegate'类型,因为它不是委托类型",并且"无法在此范围内声明名为'temp'的局部变量,因为它会给出差异意义'temp',已在'父级或当前'范围内用于表示其他内容"

这两个错误都在lambda线上.我怎样才能做到这一点,我做错了什么?

Phi*_*oss 6

"无法将lambda表达式转换为类型'System.Delegate',因为它不是委托类型"错误正在发生,因为lambda表达式没有类型.编译器通常从赋值的目标中推断出类型,但这是不可能的,Invoke因为它需要一个System.Delegate.转换lambda表达式将解决此问题.

没有必要声明temp为lambda表达式的参数.表达式将能够temp从包含范围引用.

将您的Invoke行更改为以下内容,它应该工作:

this.Invoke((Action)(() => txtForm.Rtf = temp));
Run Code Online (Sandbox Code Playgroud)

确保您引用System.Core上面一行的程序集,否则您将收到一条错误消息"使用泛型类型'System.Action'需要'1'类型参数".


Eli*_*sha 5

this.Invoke(new Action(() => txtForm.Rtf = temp))
Run Code Online (Sandbox Code Playgroud)