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

时间:2009-12-05 16:19:48

标签: c# .net 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;
        }

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

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

3 个答案:

答案 0 :(得分:6)

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

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

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

this.Invoke((Action)(() => txtForm.Rtf = temp));

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

答案 1 :(得分:5)

this.Invoke(new Action(() => txtForm.Rtf = temp))

答案 2 :(得分:0)

this.Invoke((Action) () => txtForm.Rtf = something); // where something is free