有谁知道为什么这行c#编码给我一个错误?

时间:2013-11-09 00:57:46

标签: c#

所以我想知道为什么这段代码给我一个问题?

this.adminList.Invoke((Delegate)(() => this.adminList.Items.Add((object)this.arg2)));

它给我的错误是:

  

错误1无法将lambda表达式转换为'System.Delegate'类型   因为它不是委托类型

有人知道为什么会这样吗?哦,顺便说一句,当我尝试做的只是adminList.Items.Add(arg2); 当我尝试时,它给了我一个错误,'在它创建的线程上没有使用'交叉线程' 但无论如何,arg2就像“用户名”,而adminList是一个列表框。这是c#。感谢您的帮助和时间:D 附:如果你可以修改它,那将非常有用,谢谢!

P.S.S:按要求提供更多代码

            if (this.str.StartsWith("!addadmin") || this.str.StartsWith("!admin"))
            {
                if (Enumerable.Contains<char>((IEnumerable<char>)this.str, this.space))
                {
                    if (this.arg2 == this.names[m.GetInt(0U)])
                        con.Send("say", new object[1]
        {
          (object) (this.names[m.GetInt(0U)].ToUpper() + ": You can't make yourself an admin.")
        });
                    else if (this.mods.Contains((object)this.names[m.GetInt(0U)]))
                    {
                        if (this.names.ContainsValue(this.arg2))
                        {
                            if (!this.adminList.Items.Contains((object)this.arg2))
                            {
                                if (this.adminList.InvokeRequired)
                                    this.adminList.Invoke((Delegate)(() => this.adminList.Items.Add((object)this.arg2)));
                                con.Send("say", new object[1]
            {
              (object) (this.names[m.GetInt(0U)].ToUpper() + ": " + this.arg2.ToUpper() + " is added as an admin.")
            });
                            }
                            else
                                con.Send("say", new object[1]
            {
              (object) (this.names[m.GetInt(0U)].ToUpper() + ": " + this.arg2.ToUpper() + " is already an admin...")
            });
                        }
                        else
                            con.Send("say", new object[1]
          {
            (object) (this.names[m.GetInt(0U)].ToUpper() + ": " + this.arg2.ToUpper() + " doesn't exist in this world.")
          });
                    }
                    else
                        con.Send("say", new object[1]
        {
          (object) (this.names[m.GetInt(0U)].ToUpper() + ": You need to be a mod or the owner to use \"" + this.arg1 + "\"")
        });
                }
                else
                    con.Send("say", new object[1]
      {
        (object) ( this.names[m.GetInt(0U)].ToUpper() + ": Use it like: \"" + this.arg1 + " USERNAME\"")
      });
            }

names是一个存储用户名的字典,mod是一个比管理员更有权力的ppl列表,m是一个PlayerIOClient.Message,arg1是第一个字所说的,str是用户说话时文本的字符串

就像我之前说的那样,adminList是一个列表框

1 个答案:

答案 0 :(得分:5)

无法将lambda表达式推断为特定的委托类型(因为可能有多个具有匹配签名的委托),因此您需要明确指定委托类型。 Delegate不是具体的委托类型,它只是所有委托的基类,所以你不能使用它。

在您的情况下,您可以使用Action代理:

this.adminList.Invoke(new Action(() => this.adminList.Items.Add(this.arg2)));